बाहर निकलें, बाहर निकलें (), बाहर निकलें (0), डाई (), डाई (0) - स्क्रिप्ट से बाहर कैसे निकलें


81

मेरा मानना ​​है कि ये सभी (और सम die()या die(0)) समान हैं। यदि वे समान नहीं हैं, जो एक स्क्रिप्ट को सफलतापूर्वक बाहर निकालने के लिए पसंद किया जाता है? यदि वे समान हैं, तो क्या सफल स्क्रिप्ट को पूरा करने के लिए कोई पसंदीदा मानक है? मैं उपयोग करते हैं exit;

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


4
मेरा मानना ​​है कि वे समान हैं stackoverflow.com/questions/1795025/…
डौग Owings

इनमें से किसी का भी उपयोग न करें ... बस प्रतिध्वनि और वापसी के संयोजन का उपयोग करें।

2
@HiroProtagonist पूरी तरह से असहमत; returnएक अलग निहितार्थ है
धमाका गोलियां

जवाबों:


67

ये सभी समान हैं। मुझे पूरा यकीन die()है कि यह सिर्फ एक सीधा-सीधा उर्फ ​​है exit(), लेकिन अगर ऐसा नहीं भी है, तो भी यह पहचान का काम करता है।

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

जहाँ तक के बीच का अंतर के रूप में exit, exit()है, और exit(0), वहाँ वास्तव में कोई भी नहीं है। पहले दो में निश्चित रूप से कोई अंतर नहीं है क्योंकि exitतकनीकी रूप से एक भाषा निर्माण है, एक फ़ंक्शन नहीं है, इसलिए इसे बिना किसी कोष्ठक के साथ या बिना कहा जा सकता है echo0साधन का एक कोड लौटना "यह कार्यक्रम सफलतापूर्वक / त्रुटियों के बिना चला", और जबकि मुझे नहीं पता कि वास्तव में क्या होता है जब आप एक तर्क पास नहीं करते हैं, PHP.net का कहना है कि एक तर्क-कम exitसफलता को इंगित करता है, इसलिए मैं शर्त लगा सकता हूं 0हालांकि, यह फिर से PHP.net तर्क के लिए एक डिफ़ॉल्ट नहीं दिखाता है।


3
exit(0)मतलब सफलता के exit(1)साथ बाहर निकलें, असफल के साथ बाहर निकलें का मतलब है।
यौषा अलायबौ

FYI करें, कभी भी कहीं भी स्पष्ट रूप से उल्लेख नहीं किया गया है (PHP मैनुअल), स्ट्रिंग पैरामीटर के साथ कॉल करने exit(या die) पर वास्तविक निकास कोड क्या होगा । आम die(-1)मुहावरे, और die("Poo!...")बहुत कुछ कहते हुए भी देखा जा सकता है, एक के बाद एक इतना यकीन नहीं हो सकता है, और वैसे भी: अनुमान अन्य व्यवसायों से संबंधित होना चाहिए ... तो, FTR: यह 0. है जिसका अर्थ यह भी है कि उत्तरार्द्ध, die("error!")सबसे अधिक होगा संभावना सीएलआई लिपियों में एक बग हो सकता है, वास्तव में! : -ओ
एसजे

6

जैसा कि कई लोगों ने उल्लेख किया है, मरना () और बाहर निकलना () बिल्कुल एक जैसे हैं।

यदि आप PHP प्रलेखन को देखते हैं , तो तर्क के लिए दो विकल्प हैं:

  • एक संख्यात्मक मान। यह केवल तभी उपयोगी है जब आप वेब सर्वर के विपरीत कमांड लाइन से PHP का उपयोग कर रहे हों। शून्य का एक मूल्य सफलता को इंगित करता है। नॉनजेरो एक विफलता की स्थिति को इंगित करता है।

  • एक स्ट्रिंग मान। बाहर निकलने पर यह ब्राउज़र में प्रदर्शित होगा।

मरने () या बाहर निकलने () के बजाय, मैं असफलताओं की स्थिति का प्रबंधन करने के लिए अपवादों और एक कस्टम शीर्ष-स्तरीय अपवाद हैंडलर का उपयोग करने की सलाह देता हूं ।

आपके पास अधिक लचीलापन है जो स्वचालित त्रुटि लॉगिंग जैसी चीजों को करने का तरीका है। इसके अलावा, यदि आप JSON API को कार्यान्वित करने के लिए PHP का उपयोग कर रहे हैं, तो यह अपवाद हैंडलर JSON स्निप के बजाय एक वैध, त्रुटि-संकेत को वापस सौंप सकता है।


मैं विफलता की स्थितियों के बारे में समझता हूं, लेकिन मैं सफलता को ठीक से इंगित करना चाहता हूं।
विस्फोट

सामान्य के लिए, ब्राउज़र आधारित इंटरैक्शन बस मर जाते हैं ()। Php की कमांड लाइन उपयोग के लिए, मरो (0)।
nsanders

यह ध्यान देने योग्य है ... मरना () अपने आप में एक त्रुटि स्थिति नहीं दर्शाता है। यह बस सभी php स्क्रिप्ट निष्पादन को रोकता है।
nsanders

+1 कमांड लाइन का उल्लेख करते हुए, बहुत से लोग कमांड लाइन php के बारे में भूल जाते हैं
जॉन मैगनोलिया

@JohnMagnolia: लेकिन फिर वह तुरंत नीचे एक ही चीज़ के बारे में भूल गया, जब कहती है "जब निकास होता है तो ब्राउज़र को प्रदर्शित किया जाएगा"। ;) (ज़ाहिर है, यह एक सीएलआई कंसोल में भी प्रदर्शित किया गया है।)
एसजेड।

5

मैं यह कहूंगा कि एक बेहतर शब्दार्थ के साथ एक die($arg);असामान्य या अप्रत्याशित समाप्ति के लिए उपयोग किया जाना चाहिए, तब भी जब-जब कोर्स-आप अभी भी इसे पकड़ चुके हैं। और exit($arg);, एक सामान्य (उम्मीद / नियंत्रित) एक प्रक्रिया के अंत के लिए इस्तेमाल किया जाना चाहिए की तरह break;एक के लिए forया whileया एक switchसंरचना लेकिन एक निश्चित अंत के साथ।

फिर भी .. मैं व्यक्तिगत रूप से अक्सर एक सामान्य if { } else { }संरचना का उपयोग करके बड़ी प्रक्रियाओं या आउटपुट बफरिंग की विभिन्न शाखाओं को नियंत्रित करता हूं ताकि "निकास" का उपयोग न हो सके।

मैं भी die($arg)सरल त्रुटि को पकड़ने वाले शब्दार्थ में उपयोग करता हूं

$db = mysql_connect([$args]) or die ($error); ...


1

die();के लिए सिर्फ एक पर्याय है exit();और कार्यात्मक रूप से समान है।

मानक तरीका सफलता से संकेत करने के लिए निकास कोड शून्य का उपयोग करना है, और त्रुटि स्थिति को दर्शाने के लिए कुछ और।


1

डाई () आम तौर पर स्क्रिप्ट को एक त्रुटि आउटपुट के साथ मारने के लिए उपयोग किया जाता है:

die("There was a fatal error");

जहाँ-जहाँ निकास का प्रयोग आम तौर पर एक सफल निकास के रूप में किया जाता है (कम से कम मेरी कोडिंग में)

पीएचपी मैनुअल का कहना है कि कार्यों के समान हैं।


1

मैं नरक में उतर जाऊंगा , लेकिन कुछ मामलों में जब सीएलआई में हैकिंग होती है, तो हम नहीं चाहते हैं कि कार्यक्रम को मार दिया जाए, जबकि पूर्ण निष्पादन जारी नहीं रखना चाहते हैं।

यहां लक्ष्य एक अलग हाथ-बिंदु फ़ाइल के लिए एप कॉल करने से बचना है। कहें कि मेरे इंटरफ़ेस में एक अच्छा प्ले बटन है, जो सिस्टम कॉल को निष्पादित करता है।

उदाहरण 1: कार्यक्रम नौकरी के बाद मारा गया, कोई भी डेटा वापस नहीं आया। यह वांछित नहीं है।

if ($_GET["play"] != ""){
  // Some job
  exit; 
}
/* Huge amount of data*/ 

उदाहरण 2: कार्यक्रम अभी भी चलता है , GET अनुरोध में पूरे डेटा को खिलाता है। इस मामले पर यह अनावश्यक है। यह सभी डेटा के साथ ब्राउज़र को धीमा कर रहा है, जो कि वह पहले ही कर चुका है।

if ($_GET["play"] != ""){
  // Some job
}
/* Huge amount of data*/ 

उदाहरण 3: कार्यक्रम अभी भी चलता है , कोई डेटा अपेक्षित रूप से नहीं लौटा है, प्ले कमांड निष्पादित किया गया था, लेकिन पूरे डेटा सेट को पार्स किया गया, यह अनावश्यक काम है, php / मशीन को धीमा कर सकता है।

/* Huge amount of data*/ 
if ($_GET["play"] != ""){
  // Some job
}

उदाहरण 4: कार्यक्रम अभी भी चलता है , कोई डेटा उम्मीद के मुताबिक नहीं लौटा है, प्ले कमांड निष्पादित किया गया था, पूरे डेटा को पार्स नहीं किया गया था, php ने खाली प्रतिक्रिया के साथ सुपर 200OK को जल्दी से वापस कर दिया, जैसा कि उम्मीद थी। सब लोग खुश!

if ($_GET["play"] != ""){
  // Some job
  goto END;
}
/* Huge amount of data*/
END;

हाँ! GOTO का उपयोग करना, कभी-कभी माना जाता है -सबसे अच्छा करने के लिए sometimes -!

https://www.php.net/manual/en/control-structures.goto.php

https://i.stack.imgur.com/kQnqC.png


0

dieके बराबर है exit

मैनुअल से :

यदि स्थिति पूर्णांक है, तो उस मान का उपयोग निकास स्थिति के रूप में किया जाएगा।

यह केवल तभी उपयोगी है जब आपके पास किसी प्रकार का रैपर हो जो बाहर निकलने की स्थिति के आधार पर कुछ करता है। जब तक आपको बाहरी दुनिया के लिए एक निकास कोड रिपोर्ट करने की कोई विशिष्ट आवश्यकता नहीं है, बस exit;

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.