2012-09-22 32 views
7

मैं बड़ा आश्चर्य हुआ था जब मैं आज निम्नलिखित कोड का परीक्षण किया:PHP वास्तव में 'गतिशील' चर कैसे प्राप्त करता है?

$star = "Aquarius"; 
$star = 11; 

जबकि डीबगिंग, मैंने देखा कि $star बस string प्रकार से integer प्रकार में बदल जाएं। मैं इस कार्यक्षमता से आश्चर्यचकित था। उदाहरण के लिए सी ++ में, यह असंभव है, लेकिन सी # में मैंने var वैरिएबल माना लेकिन यह वही नहीं है।

उदाहरण के लिए आप ऐसा नहीं कर सकते:

var dynamic = "Hello"; 
dynamic = 3; 

मुझे आश्चर्य है कि वास्तव में बिंदु पर होता है क्या जब मैं मूल रूप से कहते हैं कि $ स्टार = 11. मेरा अनुमान है कि $star बस इसे पुनः शुरू किया गया है, क्योंकि यह सीधे किया जा रहा है शुरू किया सौंपा गया (लेकिन यह अजीब लगता है क्योंकि दुभाषिया पहले से ही जानता है कि एक चर $star पहले घोषित किया गया है)। क्या कोई कुछ स्पष्ट या आधिकारिक स्रोत-समर्थित स्पष्टीकरण के साथ सहायता कर सकता है?

धन्यवाद।

उत्तर

7

सी/C++ प्रकार अनुकूलन के प्रकार पर आधारित हो सकता है कि की वजह से संकलन समय पर परिभाषित किया गया है।

सी # में संकलक संदर्भ के आधार पर और कंपाइलर्स मस्तिष्क में प्रकार का अनुमान लगाता है, यह इस प्रकार के लिए var कीवर्ड को प्रतिस्थापित करता है। यही कारण है कि संकलक ने प्रारंभिक अनुमान बनाने के बाद आप प्रकार को नहीं बदल सकते हैं।

PHP एक चर जैसे स्क्रिप्टिंग भाषाओं में हैश मैप (एसोसिएटिव ऐरे, एक सिंबल टेबल) में प्रवेश है। यह नामस्थान (और दायरा) को परिभाषित करता है। वास्तविक मूल्य भाग एक सामान्य वस्तु प्रकार है जो मूल्य और प्रकार दोनों को संग्रहीत करता है।

+0

वाह, महान देख रहे थे है। तो क्या इसका मतलब यह है कि सी # में एक चर को वास्तव में * सामान्य * ऑब्जेक्ट प्रकार के रूप में संग्रहीत नहीं किया जाता है ?? और क्या यह संभव है कि आप कोई भी स्रोत प्रदान कर सकें जहां मैं और जान सकूं? धन्यवाद – rtuner

+1

सी # वीएम पर चलाने के लिए बाइट-कोड आउटपुट करने वाली एक भाषा है। 'जेनेरिक ऑब्जेक्ट टाइप' जिसका मैं PHP उदाहरण में जिक्र कर रहा था, 2 सदस्यों के साथ 'सी भाषा संरचना' से अधिक कुछ नहीं है (मैं इसे कहकर थोड़ा सा सरल करता हूं)। अधिक स्रोत कठिन हैं क्योंकि आप अवधारणाओं को 3 अलग-अलग प्रकार की भाषाओं से जोड़ते हैं (एक असेंबली कोड के लिए, एक बाइट कोड के लिए और एक व्याख्या निष्पादन के लिए)। –

0

PHP एक गतिशील भाषा है, जो कि पर्ल, रूबी, पायथन या कई अन्य लोगों के लिए समान है। दूसरी ओर, सी ++ संकलित और स्थिर रूप से टाइप किया गया है, प्रत्येक चर को संकलित समय पर परिभाषित प्रकार के लिए आवश्यक है।

चेक पीएचपी की गतिशील टाइपिंग कार्यान्वयन के लिए कुछ महान अंतर्दृष्टि के लिए PHP डॉक्स: http://php.net/manual/en/language.types.type-juggling.php

+0

मुझे नहीं लगता कि यह काफी वे क्या ... –

0

PHP एक ढीली टाइप की गई भाषा है। मूल्य के मुताबिक PHP वैरिएबल को सही डेटा प्रकार में बदल देता है।

चेक इस बाहर - http://php.net/manual/en/language.types.type-juggling.php

+0

वह सवाल का जवाब नहीं दे रहा है। – delnan