PHP, जैसा कि हम में से अधिकांश जानते हैं, कमजोर टाइपिंग है । जो लोग नहीं करते हैं, उनके लिए PHP.net कहता है:
PHP को चर घोषणा में स्पष्ट प्रकार की परिभाषा (या समर्थन) की आवश्यकता नहीं है; एक चर का प्रकार उस संदर्भ से निर्धारित होता है जिसमें चर का उपयोग किया जाता है।
इसे प्यार करें या इसे नफरत करें, PHP फिर से उड़ने पर चर कास्ट करता है। तो, निम्न कोड मान्य है:
$var = "10";
$value = 10 + $var;
var_dump($value); // int(20)
PHP भी आपको स्पष्ट रूप से एक चर डालने की अनुमति देता है, जैसे:
$var = "10";
$value = 10 + $var;
$value = (string)$value;
var_dump($value); // string(2) "20"
यह सब अच्छा है ... लेकिन, मेरे जीवन के लिए, मैं ऐसा करने के लिए एक व्यावहारिक कारण की कल्पना नहीं कर सकता।
मुझे भाषाओं में मजबूत टाइपिंग की समस्या नहीं है जो इसका समर्थन करते हैं, जैसे जावा। यह ठीक है, और मैं इसे पूरी तरह से समझता हूं। इसके अलावा, मैं इस बात से वाकिफ हूं - और फंक्शन पैरामीटर में टाइपिंग की उपयोगिता को पूरी तरह से समझता हूं ।
टाइप कास्टिंग के साथ मुझे जो समस्या है वह उपरोक्त उद्धरण द्वारा बताई गई है। यदि PHP वसीयत में टाइप स्वैप कर सकती है, तो आप एक प्रकार का बल लगाने के बाद भी ऐसा कर सकते हैं ; और यह ऐसा कर सकते हैं ऑन-द-फ्लाई जब आप एक ऑपरेशन में एक खास प्रकार की जरूरत है। यह निम्नलिखित को मान्य बनाता है:
$var = "10";
$value = (int)$var;
$value = $value . ' TaDa!';
var_dump($value); // string(8) "10 TaDa!"
तो क्या बात है?
ऐसी दुनिया का सैद्धांतिक उदाहरण लें जहां उपयोगकर्ता परिभाषित प्रकार की कास्टिंग PHP में समझ में आता है :
- आप कलाकारों चर बल
$foo
के रूप मेंint
→(int)$foo
। - आप चर में एक स्ट्रिंग मान संग्रहीत करने का प्रयास करते हैं
$foo
। - PHP एक अपवाद फेंकता है !! Sense इससे समझ में आएगा। अचानक उपयोगकर्ता परिभाषित प्रकार कास्टिंग का कारण मौजूद है!
तथ्य यह है कि PHP चीजों को चारों ओर स्विच करेगा जैसा कि उपयोगकर्ता परिभाषित प्रकार के कास्टिंग अस्पष्ट के बिंदु बनाता है। उदाहरण के लिए, निम्नलिखित दो कोड नमूने समतुल्य हैं:
// example 1
$foo = 0;
$foo = (string)$foo;
$foo = '# of Reasons for the programmer to type cast $foo as a string: ' . $foo;
// example 2
$foo = 0;
$foo = (int)$foo;
$foo = '# of Reasons for the programmer to type cast $foo as a string: ' . $foo;
मूल रूप से यह प्रश्न पूछने के एक साल बाद, अनुमान करें कि व्यावहारिक वातावरण में टाइपकास्टिंग का उपयोग करते हुए किसने खुद को पाया? आपका अपना।
आवश्यकता एक रेस्तरां मेनू के लिए वेबसाइट पर धन मूल्यों को प्रदर्शित करने की थी। साइट के डिजाइन के लिए आवश्यक है कि ट्रेलिंग जीरो को ट्रिम कर दिया जाए, ताकि डिस्प्ले कुछ इस तरह दिखे:
Menu Item 1 .............. $ 4
Menu Item 2 .............. $ 7.5
Menu Item 3 .............. $ 3
सबसे अच्छा तरीका है कि मैं एक नाव के रूप में चर कास्ट करने के लिए उस अपशिष्ट को करना पाया:
$price = '7.50'; // a string from the database layer.
echo 'Menu Item 2 .............. $ ' . (float)$price;
PHP फ्लोट के ट्रेलिंग जीरो को ट्रिम करता है, और फिर फ्लोट को कॉनकैटेशन के लिए एक स्ट्रिंग के रूप में पुन: बनाता है।
(string)
कास्ट करना चाहते हैं ?
$intval.'bar'
एक अपवाद फेंकता है, तब भी मैं असहमत हूं। यह किसी भी भाषा में एक अपवाद नहीं है। (सभी भाषाएं जो मैं जानता हूं कि या तो एक स्वचालित कलाकार या एक .toString()
)। यदि आप कह रहे हैं कि $intval = $stringval
एक अपवाद है, तो आप एक जोरदार टाइप की हुई भाषा के बारे में बात कर रहे हैं। मैं अशिष्ट ध्वनि करने के लिए नहीं था, इसलिए, क्षमा करें यदि मैंने किया। मुझे लगता है कि यह हर डेवलपर के लिए उपयोग किया जाता है, और बहुत कम, बहुत कम सुविधाजनक है के खिलाफ जाता है।