मुझे एहसास है कि यह एक पुराना सवाल है, लेकिन ओपी द्वारा पूछे गए प्रश्नों को PHP कैसे प्रबंधित करता है, इस बारे में कुछ और विशिष्ट जानकारी यहां दी गई है।
Introduction to Variables
मुझे पता जोड़ने को प्राथमिकता नहीं है, लेकिन है कि लिंक स्थिर होना चाहिए और मैं नहीं करना चाहता:
यह पीएचपी संदर्भ से पेज है कि आप के साथ शुरू करना चाहते हैं है थोक प्रतिलिपि PHP संदर्भ प्रलेखन। यहां पर प्रकाश डाला गया है।
ओपी: PHP कैसे जानता है कि यह किस प्रकार के चर का उपयोग करता है (या करता है)?
पीएचपी सी में लिखे और एक सी struct typedef जो इसे एक सी संघ typedef जो एक zval_value सभी चर का प्रतिनिधित्व करने के लिए कॉल है के साथ एक zval कॉल का उपयोग करता है।
typedef struct _zval_struct {
zvalue_value value; /* variable value */
zend_uint refcount__gc; /* reference counter */
zend_uchar type; /* value type */
zend_uchar is_ref__gc; /* reference flag */
} zval;
"इंजन एक चर की अवधारणा की जटिलता है कि संरचनाओं विभिन्न क्षेत्रों तक पहुँचने के लिए मैक्रो की एक समान और सहज ज्ञान युक्त सेट उपलब्ध कराने के द्वारा किसी भी प्रकार किया जा सकता है को कवर करने के लिए प्रयास करता है।"
"PHP एक गतिशील, ढीली टाइप की गई भाषा है, जो कॉपी-ऑन-राइट और संदर्भ गिनती का उपयोग करती है।" रेफरेंस गिनती और कॉपी-ऑन-राइट (गाय) दो शक्तिशाली अवधारणाएं PHP हैं जिनका उपयोग मैं यहां नहीं जाऊंगा लेकिन पढ़ने के लायक हैं।
"कमजोर टाइपिंग कनवर्ट करते हैं, या निष्पादन समय पर आवश्यक प्रकार में चर मजबूर करने के लिए इंजन की वरीयता के निहित है। संदर्भ गिनती साधन है जिसके द्वारा इंजन जब एक चर नहीं रह गया है किसी भी संदर्भ होते हैं यह मान सकते हैं है उपयोगकर्ता कोड, और चर के साथ जुड़े संरचनाओं को मुक्त करने में सक्षम है। "
"zval_value एक संघ है जो सभी प्रकार के एक चर पकड़ सकता है प्रतिनिधित्व कर सकते हैं।"
"... एक चर एक प्रकार का हो सकता है, चर डेटा में उपयुक्त क्षेत्र का प्रतिनिधित्व करती है zval_value संघ। zval ही प्रकार, संदर्भ गिनती और एक झंडा यदि किसी वैरिएबल एक संदर्भ है इंगित करने के लिए आयोजित करता है। "
पीएचपी कैसे संकलित करता है?
"संकलन" एक व्यापक शब्द है जिसका अलग अर्थ हो सकता है और PHP पारंपरिक अर्थ में संकलित नहीं होता है। यह एक प्रकार का प्री-संकलन करता है जो स्रोत कोड को ऑपकोड में परिवर्तित करता है जो निर्देशक हैं जिन्हें प्रोसेसर द्वारा निष्पादित किया जा सकता है। ये ऑपकोड कैश किए जाते हैं जो PHP को अक्सर स्क्रिप्ट नामक पार्स से रोकते हैं।
यह कैसे पता चलता है कि परिवर्तनीय प्रकार क्या होगा? क्या यह भी परवाह करता है?
जैसा कि पहले ही यह ऊपर उद्धृत "परिवर्तित, या चर मजबूर करने के लिए निष्पादन समय पर आवश्यक प्रकार में वरीयता।" PHP इंजन की है Baiscally PHP हमेशा यह संग्रहीत करता है कि यह एक चर के प्रकार को निर्धारित करता है जब यह बनाया जाता है, लेकिन जब एक चर का संदर्भ दिया जाता है, तो PHP का संदर्भ उस संदर्भ पर आधारित होता है जिस पर इसका उपयोग किया जा रहा है।
"पीएचपी दुर्बलता से लिखा गया, के रूप में इस तरह के इंजन एक प्रकार से दूसरे चर परिवर्तित करने के लिए एपीआई कार्यों प्रदान करता है।"
इंजन मैक्रो का समूह यह zvals के साथ काम करने के लिए एक कन्वर्ट करने के लिए उपयोग करता है वेरिएबल का प्रकार ताकि आपको आमतौर पर इसका सामना न करना पड़े।
आप क्या zvals कार्रवाई में की तरह लग रहे वे के साथ फेंक दिया जा सकता है देखना चाहते हैं:
debug_zval_dump($variableName);
यह हास्केल, जहाँ आप की तरह कुछ लिख सकते हैं के रूप में कुछ भाषाओं, देखते हैं कि यह भी ध्यान देने योग्य है 'एक्स = एफ 1000', और यह 'x'' के प्रकार के आधार पर 'x'-type का प्रकार क्या होगा, यह अनुमान लगाएगा, संकलन पर, यह सी की तरह दिखता है; घोषणा पर, यह PHP की तरह दिखता है। थैरस की तरह PHP काम करता है, ज़ाहिर है। –