वहाँ इस के लिए एक तार्किक व्याख्या है?क्या यह एक php चर परिवर्तनीय बग है?
<?php
$$a = 'hello world';
echo $$a; //displays hello world
echo $$aa; //displays hello world
echo $$aaa; //displays hello world
?>
वहाँ इस के लिए एक तार्किक व्याख्या है?क्या यह एक php चर परिवर्तनीय बग है?
<?php
$$a = 'hello world';
echo $$a; //displays hello world
echo $$aa; //displays hello world
echo $$aaa; //displays hello world
?>
अगर आप कोशिश
$$a = 'hello world';
echo $$a; //displays hello world
echo $$aa; //displays hello world
echo $$aaa; //displays hello world
die("<pre>" . print_r(get_defined_vars(), true) . "</pre>");
आप देख सकते हैं कि यह कोई नाम के साथ एक चर registed है तो हाँ, पीएचपी का नामकरण सम्मेलनों के अनुसार, इस होगा एक बग
तो php नामकरण सम्मेलन के विपरीत, एक चर शून्य हो सकता है, या एक खाली स्ट्रिंग – Dami
मुझे लगता है कि वह परिवर्तनीय नाम के लिए नामकरण सम्मेलनों को संदर्भित करता है। '$ var' एक चर है, लेकिन' $ 'नहीं है ... –
मुझे यकीन नहीं है कि यह एक बग क्या बनाता है। यह निश्चित रूप से अच्छा अभ्यास नहीं है, और मेरी इच्छा है कि PHP डिफ़ॉल्ट रूप से इस तरह की चीजों पर चेतावनी उठाएगा, लेकिन व्यवहार सुसंगत है। – Matchu
मैं दांव लगा रहा हूँ कि यह ${''}
के प्रभाव, या कोई नाम के साथ एक चर, या कुछ उन पंक्तियों के साथ करने के लिए कुछ के रूप में चर को परिभाषित कर रहा है।
न $a
है और न ही $aa
है और न ही $aaa
के बाद से परिभाषित कर रहे हैं, वे जब एक चर चर संदर्भ में प्रयोग किया ही अजीब, खाली चर नाम करने के लिए सभी बिंदु।
ठीक है, अगर $ एक खाली है, तो आप = 'हैलो दुनिया' के लिए एक खाली चर नाम कर रहे हैं ... तो फिर हर बार जब आप संदर्भ है कि खाली चर नाम, आप मिल जाएगा क्या वहाँ संग्रह किया गया है .. ।
यह सिर्फ
$a = '';
$$a = 'Foo Bar';
$b = '';
echo $$b; //Displays Foo Bar
आप यह सही हो रही है नहीं कर रहे हैं, इस पर विचार करें:
$a = 'hello';
$hello = "hello again";
echo $$a;
आउटपुट:
hello again
आपके मामले में, आप, निम्न वैरिएबल का मान सेट नहीं किया है तो यह आउटपुट वही।
स्पष्टीकरण:
जब आप $$a
करते हैं, तो इसका मतलब है:
$ $a;
^ ^
$ used for php vars means a's value that is hello
तो यह हो जाता है:
$hello
किसका मूल्य है:
hello again
मैं परिवर्तनीय चर को समझता हूं, मैं बस इतना खुश हूं कि एक अनाम नाम हो सकता है, या एक चर या शून्य के साथ एक खाली स्ट्रिंग सेट हो सकता है। – Dami
जब
$$a = 'foo';
कर आप कह रहे हैं $a
का मान ले। इसे स्ट्रिंग में कनवर्ट करें। के रूप में चर नाम यह करने के लिए 'foo'
आवंटित करने के लिए स्ट्रिंग का उपयोग करें।चूंकि $a
अपरिभाषित है और NULL
लौटाता है, जो स्ट्रिंग को टाइपकास्ट करते समय ''
है, तो आप चर ${''}
निर्दिष्ट कर रहे हैं;
echo ${''}; // 'foo'
विडंबना यह है कि आप कर सकते हैं
और आप कर सकते हैं
${''} = function() { return func_get_arg(0); };
echo ${''}('Hello World');
// or
echo $$x('Hello World');
जो एक नोटिस $x
के बारे में अपरिभाषित जा रहा है लेकिन उत्पादन Hello World
तो ट्रिगर करेगा। काफी अजीब बात है, निम्नलिखित does not काम:
${''} = function() { return func_get_arg(0); };
echo $x('Hello World');
क्योंकि यह चलाता है गंभीर त्रुटि: समारोह नाम एक स्ट्रिंग होना चाहिए। क्विर्की: डी
पीएचपी मैनुअल के बाद से कहते हैं
Variable names follow the same rules as other labels in PHP. A valid variable name starts with a letter or underscore, followed by any number of letters, numbers, or underscores.
मैं वास्तव में एक खाली नामित चर एक बग आवंटित करने के लिए सक्षम किया जा रहा पर विचार होगा।
यकीन नहीं है कि यह विडंबना है, क्या आप वास्तव में क्या उम्मीद करेंगे? क्या यह नहीं है कि पार्सर कैसे काम कर रहा है, इस बारे में अधिक बात करता है, जिसमें यह केवल खाली स्ट्रिंग की स्पष्ट घोषणाओं को पहचानता है। अस्वीकरण: मुझे php के बारे में कुछ नहीं पता है। – Grantismo
@Grantismo मैं उम्मीद करता हूं कि PHP मुझे $ {''} = 'foo' करने से रोक देगा जब मैं $ = 'foo' नहीं कर सकता और मैनुअल कहता है कि चर के नाम का नाम होना चाहिए। इसके अलावा, चर निर्दिष्ट करने का सामान्य तरीका घुंघराले ब्रेसिज़ के बिना है। लेकिन हाँ, आपको पार्सर के बारे में आश्चर्य है :) – Gordon
कोई यह नहीं, वह नहीं यह सही हो रही है है यह शायद एक php 5.3 व्यवहार – Dami
है:
कुछ हद तक एक संबंधित बग यह पहले से ही के लिए दायर नहीं है। – Sarfraz
धन्यवाद सब। यह अब दूसरे शब्दों में समझ में आता है। echo $ {null}; भी मान्य है। – Dami