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




exit die (12)

मूल में अंतर

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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


php.net/manual/en/aliases.php कहता है कि die exit का एक सहयोगी है, इसलिए वे समान हैं। लेकिन यह भी बताता है कि:

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

तो, मुझे पागल कहो, लेकिन भविष्य में कोई die नहीं सकता है।


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


मेरी स्क्रिप्ट में मैंने जो कुछ देखा है, कम से कम यह है कि बाहर निकलने वाला () वर्तमान में निष्पादित स्क्रिप्ट को रोक देगा और किसी भी कॉलिंग स्क्रिप्ट पर नियंत्रण वापस कर देगा, जबकि मरने से उसके ट्रैक में PHP बंद हो जाएगा। मैं कहूंगा कि यह काफी बड़ा अंतर है?


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

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

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

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


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


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


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

परंतु

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

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

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


जैसा कि अन्य सभी सही उत्तरों कहते हैं, die और exit समान / उपनाम होते हैं।

यद्यपि मेरे पास व्यक्तिगत सम्मेलन है कि जब मैं अपेक्षित और वांछित होने पर स्क्रिप्ट के निष्पादन को समाप्त करना चाहता हूं, तो मैं exit; उपयोग करता हूं exit; । और जब मुझे कुछ समस्याओं के कारण निष्पादन समाप्त करने की आवश्यकता होती है (डीबी से कनेक्ट नहीं हो सका, फ़ाइल आदि पर नहीं लिखा जा सकता है), मैं die("Something went wrong."); हूं die("Something went wrong."); स्क्रिप्ट को "मारने" के लिए।

जब मैं बाहर निकलने का उपयोग करता हूं:

header( "Location: http://www.example.com/" ); /* Redirect browser */
/* Make sure that code below does not get executed when we redirect. */
exit; // I would like to end now.

जब मैं मर का उपयोग करता हूं:

$data = file_get_contents( "file.txt" );
if( $data === false ) {
    die( "Failure." ); // I don't want to end, but I can't continue. Die, script! Die!
}
do_something_important( $data );

इस तरह, जब मैं अपने कोड में किसी बिंदु पर exit हूं, तो मुझे पता है कि इस बिंदु पर मैं बाहर निकलना चाहता हूं क्योंकि तर्क यहां समाप्त होता है। जब मैं die हूं, मुझे पता है कि मैं निष्पादन जारी रखना चाहता हूं, लेकिन पिछले निष्पादन में त्रुटि के कारण मैं नहीं कर सकता या नहीं।

बेशक यह केवल एक परियोजना पर काम करते समय ही काम करता है। जब अधिक लोग होते हैं तो कोई भी उन्हें die या exit लिए नहीं रोकता है, जहां यह मेरे सम्मेलनों में फिट नहीं होता है ...


कमांड लाइन का उपयोग करते समय,

 die("Error");

STDOUT को "त्रुटि" पर प्रिंट करेगा और त्रुटि कोड 0 से बाहर निकलेंगे।

अगर आप त्रुटि कोड 1 से बाहर निकलना चाहते हैं, तो आपको यह करना होगा:

  fwrite(STDERR, "Error");
    exit(1);

कमांड लाइन या शैल स्क्रिप्ट से PHP स्क्रिप्ट को निष्पादित करते समय यह उपयोगी हो सकता है और आप देखना चाहते हैं कि स्क्रिप्ट को शून्य शून्य निकास कोड से समाप्त किया गया है या नहीं। Quora से charanjeet का जवाब कॉपी किया





die