क्या PHP के कार्य संवेदनशील हैं?


100

मैं कुछ कोड के माध्यम से खुदाई कर रहा था, और मुझे कुछ कॉल मिले mySQL_fetch_array। क्या PHP का मामला फ़ंक्शन नामों के बारे में संवेदनशील है? मुझे याद है कि इसे कहीं पढ़ रहा हूं लेकिन इसका कोई संदर्भ नहीं मिल रहा है।


1
नहीं, वे नहीं लगते। वरीयता आमतौर पर कम मामला है
जेसन

3
का डुप्लीकेट stackoverflow.com/questions/2749781/... । नहीं, फ़ंक्शंस संवेदनशील नहीं हैं
बॉब बैडले

संदर्भ के लिए: इसे यहां मध्य php.net/manual/en/functions.user-defined.php में एक नोट: ब्लॉक में दफन किया गया है ।
मारियो

3
मैं इस खुले को छोड़ने के लिए मतदान करता हूं - शीर्षक बहुत अधिक सामान्य और स्पष्ट है, इस प्रकार यह अधिक लोगों की मदद करने की संभावना है।
कोरीवर्ड

जवाबों:


100

मैं इस से उद्धृत कर रहा हूँ :

नोट: फ़ंक्शन नाम केस-असंवेदनशील होते हैं, हालांकि यह आमतौर पर फ़ंक्शन को कॉल करने के लिए अच्छा रूप है क्योंकि वे अपनी घोषणा में दिखाई देते हैं।

तो, इसकी तरह लगता है कि उपयोगकर्ता-परिभाषित फ़ंक्शन केस-संवेदी नहीं हैं, PHP5 केस-सेंसिटिव के तहत फ़ंक्शंस / ऑब्जेक्ट बनाने के लिए एक वोट था ।


3
PHP5 पहले से ही बाहर है, आपकी एकमात्र उम्मीद PHP6 है और मुझे नहीं लगता कि वे यह कदम उठाएंगे। यह बहुत कम लाभ के लिए टूट जाएगा।
मार्क टोमलिन

3
@ मर्क टोमलिन मैं असहमत हूँ। सबसे अच्छा अभ्यास उसी मामले को बनाए रखना है जो मैनुअल के पास है, इसलिए स्पष्टता बढ़ाते हुए इसे थोड़ा तोड़ देना चाहिए।
बेन Dauphinee

12
वाह। दुखद बात है। हालांकि ImAgEcReAtEfRoMpNg () कोड में बाधा डालने का एक अच्छा तरीका है ...
पोंटोमेडॉन

8
चूंकि उद्धरण "केस-असंवेदनशील" कहता है, आप क्यों कहते हैं "तो ऐसा लगता है कि उपयोगकर्ता-परिभाषित केस-संवेदी है"? यदि यह एक टाइपो है, तो आपको वास्तव में इसे ठीक करना चाहिए।
बरमार

11
वाह! कोडिंग के 7 साल बाद यह पता लगाना बहुत अच्छा है!
दान

34

नहीं।

PHP फ़ंक्शन संवेदनशील नहीं हैं।


19

TL; DR: वर्ग के नाम केस-असंवेदनशील होते हैं, लेकिन घोषणा में हमेशा उसी मामले का उपयोग करते हैं (जैसे कि फ़ंक्शन के साथ)। इसके अलावा, अलग-अलग मामलों के साथ तात्कालिक कक्षाएं, क्योंकि वे परिभाषित किए गए थे ऑटोलॉजिस्ट के साथ समस्याएं हो सकती हैं।


इसके अलावा, वर्ग के नाम केस-असंवेदनशील हैं:

<?php
class SomeThing {
  public $x = 'foo';
}

$a = new SomeThing();
$b = new something();
$c = new sOmEtHING();
var_dump($a, $b, $c);

यह आउटपुट:

class SomeThing#1 (1) {
  public $x =>
  string(3) "foo"
}
class SomeThing#2 (1) {
  public $x =>
  string(3) "foo"
}
class SomeThing#3 (1) {
  public $x =>
  string(3) "foo"
}

समस्या ऑटोलॉजर्स और केस-सेंसिटिव फाइल-सिस्टम (जैसे ext2 / 3/4) का उपयोग कर रही है, इसमें आपको क्लास का नाम उसी केस से जोड़ना होगा, जिस फाइल में क्लास का नाम है (न कि क्लास का नाम वास्तव में कैसे केस किया गया है) या उपयोग strtolower:

वर्ग फ़ाइल:

<?php
// filename something.php
class SomeThing {
   ...
}

ऑटोलैडर फ़ंक्शन ( __autoloadया रजिस्टर करने के लिए एक फ़ंक्शन spl_autoload_register)

function my_autloader($className) {
  $filename = CLASSES_DIR . DIRECTORY_SEPARATOR . $className . '.php';
  if (file_exists($filename)) {
    require($filename);
  }
}

अब इस कोड के साथ:

$a = new something(); // works
$b = new SomeThing(); // does not work
$c = new SOMETHING(); // does not work

यदि आपने strtolower()ऑटोलैडर कोड में कॉल जोड़ा है, तो आप यह काम कर सकते हैं (यानी प्रभावी रूप से असंवेदनशील वर्ग के नाम ऑटोलैडर का उपयोग कर सकते हैं) , लेकिन फ़ंक्शंस के साथ, एक क्लास को उसी तरह से संदर्भित करना बेहतर है, जैसा कि घोषित किया गया है। वर्ग नाम के रूप में एक ही मामले के साथ फ़ाइल नाम है, ऑटोलराइज़र का उपयोग करें, और उपयोग strtolowerऔर पसंद को भूल जाएं ।


7

नहीं, वे मामले के प्रति संवेदनशील नहीं हैं, हालांकि, आपको हमेशा उस मामले का उपयोग करना चाहिए जो मैनुअल में है, स्थिरता के लिए।

हालांकि, चर रहे हैं केस संवेदी।


3

PHP चर में संवेदनशील होते हैं, लेकिन फ़ंक्शंस में इस तरह की कोई समस्या नहीं होती है। आप आउटपुट प्रदर्शित करने के लिए निम्नलिखित कथनों का उपयोग कर सकते हैं, सभी समान परिणाम दिखाएंगे।

<?php
Echo "This is a test script";
ECHO "This is a test script";
echo "This is a test script";
?>

दूसरी ओर, यदि आप चर की संवेदनशीलता को बदल देंगे तो यह त्रुटि दिखाएगा।

उदाहरण:

<?php
$a=5;
echo $A;// It will show the error.
?>

आउटपुट:

Notice: Undefined variable: A in C:\xampp\htdocs\test.php on line 3

2

और विधि नाम केस-असंवेदनशील भी हैं। जैसे: -

<?php
       class C { 

           public function method() { } 

           public function METHOD() { } 
       }

उत्पादन:

PHP Fatal error:  Cannot redeclare C::METHOD() in ....php on line 6

1

सभी की प्रतिक्रिया के निष्कर्ष में। भले ही PHP को अब तक PHP5 में सभी मामलों में चरित्र मामले की निरंतरता की आवश्यकता नहीं है।

सर्वोत्तम अभ्यास होगा

हमेशा ऐसे ही मामलों का उपयोग करें जब संदर्भ या तो चर (इसके 'अनिवार्य' या फ़ंक्शंस (इसके वैकल्पिक, लेकिन अनुशंसित) हों।

आप कभी नहीं जानते कि शायद एक दिन वोट मिल जाए और आप कुछ साल पहले अपने अनुप्रयोगों में बदलते मामलों के पूरे दुःस्वप्न को बचा लेंगे, जिन्हें PHP में अपडेट की आवश्यकता होती है।

आशा है कि यह वैसे भी मदद करता है।


"बदलते मामलों के पूरे दुःस्वप्न को बचाएं": नहीं, मेरी समझ यह है कि यदि परिवर्तन कभी किया जाता है, तो केस-संवेदनशीलता एक विकल्प होगा, जिसे php.ini में सेट किया गया है। इस प्रकार पीछे की अनुकूलता का संरक्षण।
टूलमेकरस्टेव

-2

हो सकता है कि यह बहुत देर हो जाए, लेकिन ...

हर कोई यहां पहले से ही जानता है: PHP इंजन अक्षरों के मामले की परवाह नहीं करता है।

और PHP बगट्रैकर पर वोट है, जहां बहुमत कहता है: "हां, मैं प्रो केस सेंसिटिविटी हूं"।

लेकिन मुझे संक्रमण है, क्योंकि मेरे एमवीसी ढांचे में, मैं नियंत्रक कार्रवाई कहता हूं:

    $currentController = new $controller($parameters);
    $currentAction = $currentController->{$action}();

$ कंट्रोलर और $ एक्शन यूआरएल से लिया जाता है।

सोचें, यदि कोई उपयोगकर्ता मेरी साइट का लिंक प्रकाशित करता है: https: // my-site / MyPartnerController / MyPartnerGallery

जबकि वर्ग myPartnerController नाम है ...

अगर PHP की कक्षाएं और फ़ंक्शन नाम केस संवेदी हैं, तो इसका मतलब है कि कोई भी कभी भी इस पृष्ठ को प्राप्त नहीं करता है।

हां, मैं हमेशा कोड में सभी नामों का उपयोग करता हूं जैसा कि घोषित किया गया है। लेकिन मैं प्रार्थना करता हूं कि वे कभी भी कार्य न करें 'और वर्गों के नाम संवेदनशील हैं।

धन्यवाद!


1
यह वास्तव में बुरा है ... अगर मैं अपनी साइट / myLogInPage / loginsuccess पर जाता हूं , और कुछ अनुमान लगाता हूं कि आपने अपने लॉगिन सफलता फ़ंक्शन को क्या कहा है, तो मैं इसमें शामिल होऊंगा , या कुछ चीजों को मिटा सकता हूं ...।
१२:०४ पर Tschallacka
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.