मैं कुछ कोड के माध्यम से खुदाई कर रहा था, और मुझे कुछ कॉल मिले mySQL_fetch_array
। क्या PHP का मामला फ़ंक्शन नामों के बारे में संवेदनशील है? मुझे याद है कि इसे कहीं पढ़ रहा हूं लेकिन इसका कोई संदर्भ नहीं मिल रहा है।
मैं कुछ कोड के माध्यम से खुदाई कर रहा था, और मुझे कुछ कॉल मिले mySQL_fetch_array
। क्या PHP का मामला फ़ंक्शन नामों के बारे में संवेदनशील है? मुझे याद है कि इसे कहीं पढ़ रहा हूं लेकिन इसका कोई संदर्भ नहीं मिल रहा है।
जवाबों:
मैं इस से उद्धृत कर रहा हूँ :
नोट: फ़ंक्शन नाम केस-असंवेदनशील होते हैं, हालांकि यह आमतौर पर फ़ंक्शन को कॉल करने के लिए अच्छा रूप है क्योंकि वे अपनी घोषणा में दिखाई देते हैं।
तो, इसकी तरह लगता है कि उपयोगकर्ता-परिभाषित फ़ंक्शन केस-संवेदी नहीं हैं, PHP5 केस-सेंसिटिव के तहत फ़ंक्शंस / ऑब्जेक्ट बनाने के लिए एक वोट था ।
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
और पसंद को भूल जाएं ।
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
और विधि नाम केस-असंवेदनशील भी हैं। जैसे: -
<?php
class C {
public function method() { }
public function METHOD() { }
}
उत्पादन:
PHP Fatal error: Cannot redeclare C::METHOD() in ....php on line 6
सभी की प्रतिक्रिया के निष्कर्ष में। भले ही PHP को अब तक PHP5 में सभी मामलों में चरित्र मामले की निरंतरता की आवश्यकता नहीं है।
सर्वोत्तम अभ्यास होगा
हमेशा ऐसे ही मामलों का उपयोग करें जब संदर्भ या तो चर (इसके 'अनिवार्य' या फ़ंक्शंस (इसके वैकल्पिक, लेकिन अनुशंसित) हों।
आप कभी नहीं जानते कि शायद एक दिन वोट मिल जाए और आप कुछ साल पहले अपने अनुप्रयोगों में बदलते मामलों के पूरे दुःस्वप्न को बचा लेंगे, जिन्हें PHP में अपडेट की आवश्यकता होती है।
आशा है कि यह वैसे भी मदद करता है।
हो सकता है कि यह बहुत देर हो जाए, लेकिन ...
हर कोई यहां पहले से ही जानता है: PHP इंजन अक्षरों के मामले की परवाह नहीं करता है।
और PHP बगट्रैकर पर वोट है, जहां बहुमत कहता है: "हां, मैं प्रो केस सेंसिटिविटी हूं"।
लेकिन मुझे संक्रमण है, क्योंकि मेरे एमवीसी ढांचे में, मैं नियंत्रक कार्रवाई कहता हूं:
$currentController = new $controller($parameters);
$currentAction = $currentController->{$action}();
$ कंट्रोलर और $ एक्शन यूआरएल से लिया जाता है।
सोचें, यदि कोई उपयोगकर्ता मेरी साइट का लिंक प्रकाशित करता है: https: // my-site / MyPartnerController / MyPartnerGallery
जबकि वर्ग myPartnerController नाम है ...
अगर PHP की कक्षाएं और फ़ंक्शन नाम केस संवेदी हैं, तो इसका मतलब है कि कोई भी कभी भी इस पृष्ठ को प्राप्त नहीं करता है।
हां, मैं हमेशा कोड में सभी नामों का उपयोग करता हूं जैसा कि घोषित किया गया है। लेकिन मैं प्रार्थना करता हूं कि वे कभी भी कार्य न करें 'और वर्गों के नाम संवेदनशील हैं।
धन्यवाद!