2012-07-15 22 views
7

देखकर exit()PHP documentation मुझे मिला सोच:क्यों/else बनाम या PHP में बाहर निकलें?

$filename = '/path/to/data-file'; 
$file = fopen($filename, 'r') 
or exit("unable to open file ($filename)"); 

युगल सवाल:

  1. क्या सामान्य उपयोग के मामलों exit() प्रयोग करने के लिए फ़ाइलों को खोलने के अलावा कर रहे हैं?
  2. चूंकि हर कोई जो भी लिखता है, वह हर कोई exit() में समाप्त नहीं होता है, तो आप कुछ संदर्भों में इसका उपयोग कैसे करते हैं?
  3. if/else और or/exit विनिमेय हैं?
+4

करने जैसा बिल्कुल ठीक है क्योंकि आप 'निकास' के लिए एक उदाहरण देख रहे हैं, क्योंकि वे 'या बाहर निकलें' का उपयोग करते हैं। – Gumbo

+0

@ गंबो, मैंने आपके प्रश्न को प्रश्न # 3 के गैर-संवेदी भाग को हटाने के लिए संपादित किया है जिसमें आप संदर्भित करते हैं। –

उत्तर

3

इस संदर्भ में, or कि बयान में से एक है PHP के logical operators जो जब कि की तरह इस्तेमाल किया, दूसरा बयान निष्पादित करेंगे अगर और केवल यदि पहले एक short circuit evaluation के कारण विफल रहता है।

चूंकि fopen झूठा लौटा, or exit कथन पहले भाग में विफल होने के बाद निष्पादित हो जाता है।

इसे बेहतर समझने के लिए, यहां शॉर्ट-सर्किट मूल्यांकन का त्वरित विवरण दिया गया है।

$x = 5; 
$y = 42; 

if ($x == 5 or $y == 42) { 
    echo "x or y is true"; 
} 

उपरोक्त कोड में, अभिव्यक्ति $y == 42 का मूल्यांकन कभी नहीं रहा है क्योंकि कोई जरूरत पहली अभिव्यक्ति सच था के बाद से ही मौजूद है।

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

आपके प्रश्नों का समाधान करने के लिए:

  1. जब एक फ़ाइल खोलने मैं बाहर निकलने का उपयोग नहीं होगा विफल रहा है जब तक कि कार्यक्रम बहुत विशिष्ट था। करने के लिए बेहतर काम एक त्रुटि लॉग करना होगा और फिर त्रुटि को कॉलर को वापस कर देना होगा ताकि वे तय कर सकें कि क्या करना है।
  2. exit का उपयोग करने के लिए जब आप लिख रहे हैं उस पर पूरी तरह से निर्भर करता है।
  3. शॉर्ट सर्किटिंग के बारे में स्पष्टीकरण को देखते हुए, हाँ वे उस अर्थ में अंतर-परिवर्तनीय हैं। or exit का उपयोग if/else का उपयोग करने से थोड़ा छोटा है।

आशा है कि मदद करता है।

+0

- @ ड्रू010, महान सामान, धन्यवाद! –

1

मैं कहूंगा कि आप ऐसी स्थिति में exit का उपयोग करते हैं जहां आपका कोड जारी नहीं हो रहा है, तो आपका कोड जारी नहीं है। उदाहरण के लिए एक फ़ाइल को पढ़ने की जरूरत है।

+0

मैनुअल के अनुसार "मर - समकक्ष बाहर निकलने के लिए" '। जबकि 'निकास' विवरण: 'स्क्रिप्ट के निष्पादन को समाप्त करता है। शट डाउन फ़ंक्शंस और ऑब्जेक्ट डिस्ट्रक्टर्स हमेशा निष्पादित किए जाएंगे, भले ही बाहर निकलें। ' –

+0

लॉल ठीक है मेरा बुरा :) इसे कहीं गलत पढ़ना होगा। –

2

मैं exit() का उपयोग करने से बचने के लिए उपयोग करता हूं क्योंकि यह उपयोगकर्ता के परिप्रेक्ष्य से त्रुटियों को संभालने के लिए वास्तव में बदसूरत तरीका है।

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

if/else...or whatever() के बराबर है। यह सिर्फ एक स्टाइल चीज है, बाद वाला रूप अधिक संक्षिप्त है।

4
  1. CLI लिपियों, बाहर निकलें सफलता या त्रुटि
  2. के कुछ फार्म मैं exit() या die() आवेदन कोड में उपयोग करने के लिए इच्छुक नहीं हूँ इंगित करने के लिए एक पूर्णांक पैरामीटर जो सांत्वना के लिए वापस तंग आ गया है ले जा सकते हैं, के बाद से अपवाद हैं पसंदीदा। हालांकि, मैं व्यक्तिगत रूप से सोचता हूं कि आप चीजों को थोड़ा कम कर सकते हैं ... यह स्क्रिप्ट निष्पादन को मारता है, इसलिए जब आपको स्क्रिप्ट को मारने की आवश्यकता होती है तो इसका उपयोग करें। सचमुच मैं कभी-कभी स्क्रिप्ट्स को मिड-निष्पादन को मारता हूं जब डीबगिंग (एक ऑफ ब्रेकपॉइंट्स) और यह आदर्श नहीं है (फिर अपवाद बेहतर काम करते हैं)।
  3. or का उपयोग अधिकतर सुविधाजनक है। यहाँ एक दिलचस्प बात है, हालांकि है ...

$resource = mysql_connect() || die('dead') 

क्यों काम नहीं करता है?

उत्तर यह है कि = ऑपरेटर or पर प्राथमिकता लेता है ताकि असाइनमेंट पहले ऐसा किया जा सके: ($resource = mysql_connect()) or die()। इस तरह से यह if(!($resource = mysql_connnect())) { die() }

+0

- @ damiand, धन्यवाद मैंने अभी बहुत कुछ सीखा है! –

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

  • कोई संबंधित समस्या नहीं^_^