PHP में मरने() और निकास() में अंतर क्या हैं?




exit die (10)

PHP में die() और exit() फ़ंक्शंस के बीच अंतर क्या हैं?

मुझे लगता है कि दोनों की एक ही कार्यक्षमता है, लेकिन मुझे संदेह है कि दोनों में कुछ अलग है ... यह क्या है?


मूल में अंतर

PHP में die() और exit() बीच का अंतर उनकी उत्पत्ति है

कार्यात्मक रूप से इक्विलिंट

die() और exit() समकक्ष कार्य हैं।

PHP मैनुअल

die() लिए PHP मैनुअल:

यह भाषा निर्माण exit() बराबर है exit()

exit() लिए PHP मैनुअल:

नोट: यह भाषा निर्माण die() बराबर है die()

php.net/manual/en/aliases.php लिए PHP मैनुअल:

मास्टर फ़ंक्शन exit() लिए die() एक उपनाम है exit()

अन्य भाषाओं में भिन्न

die() और exit() अन्य भाषाओं में अलग हैं लेकिन PHP में वे समान हैं।

beastwithin.org/users/wwwwolf/code/phprant.html :

... एक सी और पर्ल कोडर के रूप में, मैं जवाब देने के लिए तैयार था, "क्यों, बाहर निकलें () सिर्फ संख्यात्मक निकास स्थिति के साथ प्रोग्राम को बंद कर देता है, जबकि मर जाता है () त्रुटि संदेश को stderr को प्रिंट करता है और EXIT_FAILURE स्थिति से बाहर निकलता है। " लेकिन फिर मुझे याद आया कि हम PHP की गन्दा-वाक्यविन्यास-भूमि में हैं।

PHP में, बाहर निकलें () और मरें () समान हैं।

डिजाइनरों ने स्पष्ट रूप से सोचा "हम्म, चलो सी से बाहर निकलें () । और पर्ल लोगों को शायद यह पसंद आएगा अगर हम पर्ल से भी मर जाते हैं। ओह! हमारे पास दो निकास कार्य हैं! चलिए इसे बनाते हैं ताकि वे दोनों एक तर्क के रूप में एक स्ट्रिंग या पूर्णांक ले सकते हैं और उन्हें समान बना सकते हैं! "

अंत परिणाम यह है कि इससे वास्तव में चीजें किसी भी "आसान" नहीं होतीं, और अधिक भ्रमित होती हैं। सी और पर्ल कोडर केवल एक पूर्णांक निकास मान को टॉस करने के लिए निकास () का उपयोग करना जारी रखेंगे, और एक त्रुटि संदेश को टॉस करने और विफलता से बाहर निकलने के लिए मर जाते हैं। न्यूबीज और पीएचपी-ए-फर्स्ट-लैंग्वेज लोग शायद आश्चर्यचकित होंगे "उम, दो निकास फ़ंक्शंस, मुझे किस का उपयोग करना चाहिए?" मैनुअल यह नहीं बताता है कि बाहर निकलने का तरीका क्यों है () और मरें ()।

आम तौर पर, PHP में इस तरह की बहुत अजीब अनावश्यकता होती है - यह अलग-अलग भाषा पृष्ठभूमि से आने वाले लोगों के अनुकूल होने का प्रयास करती है, लेकिन ऐसा करने पर, यह भ्रमित अनावश्यकता पैदा करता है।


W3schools में प्रश्नोत्तरी: मरने () और निकास () फ़ंक्शन एक ही चीज़ करते हैं? मेरा जवाब झूठा है। यह गलत जवाब है। सही जवाब सच है।

स्क्रीनशॉट यहां है:


कार्यात्मक रूप से, वे समान हैं। तो यह चुनने के लिए कि कौन सा उपयोग करना है पूरी तरह से व्यक्तिगत वरीयता है। अंग्रेजी में अर्थात्, वे अलग हैं। नकारात्मक लगता है मरो। जब मेरे पास कोई ऐसा फ़ंक्शन है जो क्लाइंट को JSON डेटा देता है और प्रोग्राम को समाप्त करता है, तो यह भयानक हो सकता है अगर मैं इस फ़ंक्शन jsonDie () को कॉल करता हूं, और इसे jsonExit () को कॉल करना अधिक उचित है। इसी कारण से, मैं हमेशा मरने के बजाय बाहर निकलने का उपयोग करता हूं।


कोई फर्क नहीं पड़ता - वे वही हैं।

exit लिए PHP मैनुअल:

नोट: यह भाषा निर्माण die() बराबर है die()

die() लिए PHP मैनुअल:

यह भाषा निर्माण exit बराबर है exit


जैसा कि पहले बताया गया है, ये दो आज्ञाएं एक ही पार्सर टोकन उत्पन्न करती हैं।

परंतु

एक छोटा अंतर है, और यह है कि यह पार्कर टोकन वापस करने में कितना समय लगता है।

मैंने PHP पार्सर का अध्ययन नहीं किया है, लेकिन यदि यह "डी" से शुरू होने वाले कार्यों की एक लंबी सूची है, और "ई" से शुरू होने वाली एक छोटी सूची है, तो कार्य समय के साथ कार्य करने के लिए फ़ंक्शन नाम को देखने का समय दंड होना चाहिए " ई "। और पूरे फ़ंक्शन नाम की जांच कैसे की जाती है इसके कारण अन्य अंतर भी हो सकते हैं।

मुझे संदेह है कि यह मापनीय होगा जब तक कि आपके पास php पार्स करने के लिए समर्पित "सही" वातावरण नहीं है, और विभिन्न मानकों के साथ कई अनुरोध हैं। लेकिन एक अंतर होना चाहिए, आखिरकार, PHP एक व्याख्या की गई भाषा है।


निकास () फ़ंक्शन और मर () फ़ंक्शन का परिणाम हमेशा समान होता है। लेकिन जैसा कि उपनाम मैनुअल पेज ( php.net/manual/en/aliases.php ) में बताया गया है, यह कहता है कि मर () फ़ंक्शन निकास फ़ंक्शन को कॉल करता है। मुझे लगता है कि यह नीचे की तरह हार्ड कोड है:

function die($msg){
  exit($msg);
}

यह छोटी, मध्यम और बड़ी परियोजनाओं के लिए एक प्रदर्शन मुद्दा नहीं है, लेकिन यदि परियोजना अरबों गुणा अरबों प्रक्रियाओं को गुणा करती है, तो यह बहुत महत्वपूर्ण प्रदर्शन अनुकूलन स्थिति होती है।

लेकिन बहुत से लोग नहीं सोचते कि यह एक समस्या है, क्योंकि यदि आपके पास बहुत अधिक प्रक्रियाएं हैं, तो आपको फ़ंक्शन मास्टर या उपनाम की तुलना में अधिक समस्याएं अवश्य सोचनी चाहिए।

लेकिन, सही जवाब यह है कि; allways मास्टर फ़ंक्शन उपनाम से अधिक तेज़ है।

आखिरकार; php.net/manual/en/aliases.php कहता है कि, अब आप मरने का उपयोग नहीं कर सकते हैं। यह केवल एक उपनाम है, और इसे बहिष्कृत किया गया है।

आमतौर पर इन प्रकार के उपनामों का उपयोग करना एक बुरा विचार है, क्योंकि वे अशुभता या नामकरण के लिए बाध्य हो सकते हैं, जिससे अयोग्य स्क्रिप्ट का कारण बन जाएगा। यह सूची उन लोगों की सहायता के लिए प्रदान की जाती है जो अपनी पुरानी स्क्रिप्ट को नए सिंटैक्स में अपग्रेड करना चाहते हैं।


वे अनिवार्य रूप से वही हैं, हालांकि यह article अन्यथा सुझाता है।


वे इसके बारे में आवाज करते हैं, हालांकि, बाहर निकलने () आपको अपनी PHP स्क्रिप्ट के निकास कोड को सेट करने की अनुमति देता है।

आम तौर पर आपको वास्तव में इसकी आवश्यकता नहीं होती है, लेकिन कंसोल PHP स्क्रिप्ट लिखते समय, यदि आप स्क्रिप्ट को सही तरीके से पूरा कर लेते हैं तो आप उदाहरण के लिए बैश के साथ जांचना चाहेंगे।

फिर आप बाहर निकलें () का उपयोग कर सकते हैं और बाद में पकड़ सकते हैं। मरो () हालांकि इसका समर्थन नहीं करता है।

मरो () हमेशा कोड 0 के साथ मौजूद है। इसलिए अनिवार्य रूप से एक मर () कमांड निम्न करता है:

<?php
echo "I am going to die";
exit(0);
?>

जो समान है:

<?php
die("I am going to die");
?>

die() पर PHP मैनुअल:

मरना - बाहर निकलने के लिए समतुल्य

आप die; भी सकते हैं die; exit; के समान ही exit; - माता-पिता के साथ या बिना।

exit() die() से अधिक die() का चयन करने का एकमात्र लाभ हो सकता है कि आप एक अतिरिक्त अक्षर टाइप करने पर अतिरिक्त समय दें ;-)


Https://3v4l.org से यह आउटपुट दर्शाता है कि मरने और निकास कार्यात्मक रूप से समान हैं।





die