2012-05-07 7 views
8

मैं सिर्फ पीएचपी डॉक्स में Expressions पर पेज पढ़ा है, और सही शीर्ष पर यह कहते हैं:क्या यह विशेष उपचार है और PHP में दस्तावेज डाला गया है?

सरल अभी तक सबसे सटीक अभिव्यक्ति परिभाषित करने के लिए जिस तरह से "कुछ भी अपना महत्व होता है कि" है।

उस सरल परिभाषा में सभी कार्यों और अधिकांश भाषा संरचनाएं शामिल हैं, हालांकि कुछ भाषा संरचनाएं स्पष्ट रूप से बताती हैं कि वे एक मूल्य वापस नहीं करते हैं।

मैं die और विशेष रुचि के exit मिल जाए, क्योंकि वे कोई वापसी मान होने के बावजूद PHP में अभिव्यक्ति के रूप में इस्तेमाल किया जा सकता। कोड की निम्न लाइनों सब एक सिंटैक्स त्रुटि फेंक, के रूप में उम्मीद:

echo 'Hi' or echo 'Bye'; 

if(echo('foo')) 
    return return(1); 

$foo['bar'] = isset($foo['bar']) ? unset($foo['bar']) : 0; 

if(unset($foo['bar'])) 
    __halt_compiler() or die; 

हालांकि निम्नलिखित PHP कोड वाक्यविन्यास त्रुटियों की पूरी तरह से मुक्त है:

print 'Hi' or print 'Bye'; // Makes sense, print returns a value 

if(!die() and exit)   // Wait what's happening here? 
    quit(die(exit(quit()))); // die and exit don't have return values (does quit?) 

$x = true ? die/2 : 5*exit(); 
$y = pow(die,7); 

isset($_GET['bar']) or die(); // This one is actually pretty commonly used. 

function quit(){    
    return exit; 
} 

मैं PHP डॉक्स के माध्यम से देखा और कर सकते हैं किया है मरने() और बाहर निकलने के इस विशेष उपचार का कोई उल्लेख नहीं मिला()। क्या किसी भी PHP विशेषज्ञों को पता है कि यह कहीं भी दस्तावेज है या नहीं। क्या यह इरादा व्यवहार है, और isset($_GET['bar']) or die(); पैटर्न उपयोग करने के लिए सुरक्षित है; क्या यह अचानक PHP के भविष्य के संस्करण में टूट सकता है? के बाद से क्रियान्वयन से पहले यह दिया जाता है रुका है

+8

क्या यह सिर्फ अर्थशास्त्र का मामला नहीं है? क्या यह है कि 'मरें()'/'निकास() के पास वापसी मूल्य नहीं है * क्योंकि वे कभी वापस नहीं आते हैं? ऐसा नहीं है कि वे * वाक्य रचनात्मक रूप से * अभिव्यक्ति नहीं हैं, लेकिन रनटाइम पर आपको कभी भी वापसी मूल्य नहीं दिखाई देगा क्योंकि आपके प्रोग्राम को इसका उपयोग करने का मौका कभी नहीं मिलता है। –

+2

उपयोग करने के लिए सुरक्षित है? हाँ। उदाहरण के मुताबिक मुहावरे पूरे मैनुअल में बिखरे हुए हैं। वे इस पर वापस नहीं आ सके। इसके अलावा, आंतरिक सूची में, वे हमेशा बात करते हैं कि इसे बनाने से पहले जंगली में कितनी स्क्रिप्ट टूट जाएंगी, और यह टूट जाएगा ... मैं सभी php स्क्रिप्ट्स का 1/3 अनुमान लगा रहा हूं? लॉल – goat

उत्तर

3

die और exit (वे T_EXIT टोकन साझा) पार्स चरण, जिसके कारण पीएचपी में सिंटेक्स त्रुटि दिए बिना एक अभिव्यक्ति संदर्भ में उन्हें खुश है दौरान expr_without_variable के लिए नियमों के अंतर्गत आते हैं।

क्या किसी भी PHP विशेषज्ञों को पता है कि यह कहीं भी दस्तावेज है या नहीं।

पीएचपी के मैनुअल में विशेष उपचार का कोई विवरण नहीं है, तथापि exit मैनुअल पृष्ठ पर first example यह … or exit के रूप में इस्तेमाल किया जा रहा शो नहीं है।

क्या यह इरादा व्यवहार है, और isset($_GET['bar']) or die(); पैटर्न उपयोग करने के लिए सुरक्षित है; क्या यह अचानक PHP के भविष्य के संस्करण में टूट सकता है?

हां। हाँ। कुछ भी संभव है, हालांकि असंभव है।

+0

बिल्कुल सही जवाब, धन्यवाद :) – Paulpro

+1

@salathe यह संभव है, लेकिन आपका कारण गलत है। यह संभव है, क्योंकि 100% पिछड़ा संगतता PHP के डिज़ाइन लक्ष्यों में से एक नहीं है: http://www.php.net/manual/en/migration53.incompatible.php – Pacerier

1

एक जंगली अनुमान है कि die और exit कोई मान कर तथापि, यह कभी नहीं लौटा दी जाएगी।

यह die और exit कार्यों में कुछ "उपयोगिता" जोड़ने के लिए लागू किया गया हो सकता है।

+0

रन-टाइम पर मरें और बाहर निकलें रोकें। वाक्यविन्यास त्रुटि संकलन समय पर पकड़ा जाना चाहिए। – Paulpro

+0

@ पॉल पीआरओ। शायद उन्होंने सोचा कि यह उपयोगी होगा, जो यह है। वे शायद 'प्रिंट' की तरह एक मान वापस कर सकते हैं, हालांकि, निष्पादन पहले से रुकने के बाद मूल्य कभी वापस नहीं किया जाता है। – Ben

+0

प्रलेखन स्पष्ट रूप से बताता है कि उनके पास वापसी मूल्य नहीं है: http://php.net/manual/en/function.exit.php। मैं मानता हूं कि यह उपयोगी है, लेकिन अगर इसे कहीं भी दस्तावेज नहीं किया गया है तो मैं 'या मर();' नोटेशन का उपयोग करने में बहुत संकोच करता हूं, जब दस्तावेज़ों के अनुसार यह एक वाक्यविन्यास त्रुटि प्रतीत होता है। – Paulpro

1

मरें और बाहर निकलें वापसी मूल्य, हालांकि उस मूल्य को प्रोग्राम द्वारा उपयोग किया जाना चाहिए जिसे PHP स्क्रिप्ट कहा जाता है। This comment व्यवहार का वर्णन करता है।

4

PHP कोड पथ पर पहुंचने पर रन टाइम को छोड़कर त्रुटियों का पता नहीं लगाता है। कई अन्य भाषाओं के विपरीत, यह पृष्ठ "संकलित" होने पर त्रुटियों की सूची नहीं देता है - इसलिए आपको केवल त्रुटियां दिखाई देगी क्योंकि स्रोत कोड की उनकी संबंधित पंक्तियां निष्पादित की जाती हैं।

अपने उदाहरण में, exit या dieकी वापसी मान के मूल्यांकन कभी नहीं किया जाता है। PHP किसी त्रुटि की रिपोर्ट नहीं करता है क्योंकि इसने परिणाम को पहले स्थान पर मूल्यांकन करने की कोशिश नहीं की, क्योंकि थ्रेड निकला।

संबंधित मुद्दे