PHP, PHP की मृत्यु के बराबर है


100

क्या जावास्क्रिप्ट में "डाई" जैसा कुछ है? मैंने "ब्रेक" के साथ कोशिश की है, लेकिन काम नहीं करता है :)


2
इसे देखें: stackoverflow.com/questions/550574/…
stefita

"मर", जैसे "गोटो" संरचित प्रोग्रामिंग के साथ आज्ञाकारी नहीं हैं। इस प्रकार के निर्देशों का उपयोग कभी भी गंभीर परियोजना के लिए नहीं किया जाना चाहिए। en.wikipedia.org/wiki/Structured_programming
एड्रियन मैयर

3
function die(str) {throw new Error(str || "Script ended by death");}या वहाँ से बाहर बेहतर विकल्पों में से कुछ XD भरपूर है, लेकिन यह काम करेगा। डिबगिंग के लिए अच्छा हो सकता है, यदि आप केवल स्क्रिप्ट के पहले भाग को चलाना चाहते हैं तो यह सुनिश्चित करें कि यह काम करता है।
नीट द डार्क एबसोल

@stefita जवाब में आपकी टिप्पणी क्यों नहीं है ?? बाहर निकलें () सिर्फ मैं क्या जरूरत थी। दूसरा तरीका है, एक ऑटोक्लो लूप चलाना है, 1599 बार चलाना होगा फिर निष्पादन को रोकना होगा। धन्यवाद।
m3nda

@AdrianMaire आपका दिल सही जगह पर है, लेकिन किसी सवाल का "क्यों" मुद्दा नहीं होना चाहिए। की बुराइयों die, goto, eval, आदि बेहद regurgitated रहे हैं (और योग्यता के बिना नहीं), लेकिन वे सभी उनके विशेष उपयोगों के लिए है, विशेष रूप से निम्न स्तर के डिबगिंग के लिए। अन्यथा भाषाओं में उन्हें शामिल नहीं किया जाएगा। इस मामले में, जेएस के समकक्ष returnऔर throwसहज रूप से पर्याप्त हैं।
बेजरोर

जवाबों:


34

breakयदि आप इसे लेबल करते हैं तो आप केवल एक ब्लॉक स्कोप कर सकते हैं । उदाहरण के लिए:

myBlock: {
  var a = 0;
  break myBlock;
  a = 1; // this is never run
};
a === 0;

आप किसी फ़ंक्शन के दायरे में ब्लॉक स्कोप को तोड़ नहीं सकते। इसका मतलब है कि आप सामान नहीं कर सकते हैं:

foo: { // this doesn't work
  (function() {
    break foo;
  }());
}

आप कार्यों के साथ कुछ समान कर सकते हैं:

function myFunction() {myFunction:{
  // you can now use break myFunction; instead of return;
}}

5
मैं कभी भी ब्लॉक स्कोप को लेबल करने के बारे में नहीं जानता था। क्या इसका मतलब यह है कि foo: {}एक वस्तु है?
शाम

3
नहीं, यह एक ब्लॉक स्कोप है। यह रूप में एक ही हैfoo: if(true){...}
एली ग्रे

क्या कोई विकल्प है क्योंकि आप "कार्यक्षेत्र में एक ब्लॉक दायरे को दायरे में नहीं तोड़ सकते"?
हयकम

207
throw new Error("my error message");

7
यह पूरी तरह से जवाब है और मरने की तरह काम करता है (); हालांकि एक फायरबग के लाल "1 त्रुटि" की परवाह नहीं करनी चाहिए!
अलेक्सर

3
मुझे लगता है कि अगर PHP में "फायरबग" समतुल्य है, तो उसे भी मरने पर "1 त्रुटि" लिखना चाहिए () ;-) अच्छा जवाब!
एड्रियन मैयर

1
यह IE8 में एक चेतावनी संवाद बॉक्स का उत्पादन नहीं करेगा?
sbichenko

1-टू -1 समतुल्य नहीं, क्योंकि PHP ने अपवादों को भी रद्द कर दिया है।
ब्रिलियनड

यह पूरी तरह से AFAIK के निष्पादन पर रोक नहीं लगाएगा, लेकिन केवल फेंक के आसपास। विशेषण बहुत धुंधले हैं लेकिन मुझे पूरा यकीन है कि स्क्रिप्ट कहीं और चल सकती है।
रॉल्फ

22

आप बस return;उदाहरण का उपयोग कर सकते हैं

$(document).ready(function () {
        alert(1);
        return;
        alert(2);
        alert(3);
        alert(4);
});

वापसी मुख्य कॉलर फ़ंक्शन टेस्ट 1 () में वापस आ जाएगी; और वहाँ से परीक्षण 3 () तक जारी रहे;

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<script type="text/javascript">
function test1(){
    test2();
    test3();
}

function test2(){
    alert(2);
    return;
    test4();
    test5();
}

function test3(){
    alert(3);
}

function test4(){
    alert(4);
}

function test5(){
    alert(5);
}
test1();

</script>
</body>
</html>

लेकिन अगर आप सिर्फ 'फेंक' जोड़ते हैं; यह बिना किसी त्रुटि के पूरी तरह से निष्पादन को रोक देगा।

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<script type="text/javascript">
function test1(){
    test2();
    test3();
}

function test2(){
    alert(2);
    throw '';   
    test4();
    test5();
}

function test3(){
    alert(3);
}

function test4(){
    alert(4);
}

function test5(){
    alert(5);
}
test1();

</script>
</body>
</html>

यह फ़ायरफ़ॉक्स और क्रोम के साथ परीक्षण किया गया है। मुझे नहीं पता कि यह कैसे IE या सफारी द्वारा नियंत्रित किया जाता है


2
जहाँ तक मुझे पता है, returnकेवल एन्क्लोज़िंग फ़ंक्शन से बाहर निकलता है। जब आप पूरी स्क्रिप्ट को निष्पादित करना बंद करना चाहते हैं तो यह काम नहीं करता है।
एंड्रे लेरिया

1
हममम हाँ आप सही हैं, यह सभी स्क्रिप्ट के निष्पादन को नहीं रोकता है।
उनहेज़

throw "": ... बिना किसी त्रुटि के ... - काफी नहीं ...Uncaught ""
FZs

15

बस die()इसे कभी भी परिभाषित किए बिना कॉल करें । आपकी स्क्रिप्ट क्रैश हो जाएगी। :)

जब मैं ऐसा करता हूं, तो मैं आमतौर पर discombobulate()इसके बजाय कहता हूं , लेकिन सिद्धांत समान है।

(वास्तव में, यह क्या करता है ReferenceError, इसे फेंक दिया जाता है , जिससे यह लगभग थूक के जवाब के समान होता है - लेकिन यह डिबगिंग उद्देश्यों के लिए टाइप करने के लिए छोटा है।)


एक कस्टम अपरिभाषित पहचानकर्ता का उपयोग बहुत रचनात्मक है! मुझे पसंद है कि कैसे dieसहज और संक्षिप्त है। throwजब किसी विशिष्ट त्रुटि संदेश को लॉग करने की बात आती है , तो इसका लाभ नहीं होता है , लेकिन कभी-कभी बस संख्या पर्याप्त होती है। BTW, die;कोष्ठक के बिना (संयुक्त राष्ट्र) भी काम करता है।
बीजर

या बस मर जाते हैं; उस पंक्ति पर जहां आप चाहते हैं कि आपकी जावास्क्रिप्ट बंद हो जाए।
मार्कोज़ेन

यह जवाब इतना जेएस दिमाग है ^ ^ यह काम करता है तो यह गंदा नहीं है!
यॉन ट्रिमोरियो

7

PHP के मरने के अपने स्वयं के संस्करण को रोल करना संभव है:

function die(msg)
{
    throw msg;
}

function test(arg1)
{
    arg1 = arg1 || die("arg1 is missing"); 
}

test();

JSFiddle उदाहरण


मैं यह उल्लेख करना चाहता था कि जैसे मामलों में यह काम नहीं करेगा var a = arguments[3] || die('message')। इसके बजाय, मुझे लगता है कि मरना चाहिए: function die(msg) { return eval(`throw "${msg}"`);)लेकिन फिर भी, मुझे लगता है कि यह बस उस लाइन पर कठोर होना चाहिए जो टूट जाती है ताकि त्रुटि दिखाई दे कि कौन सी रेखा विफल हो गई, जैसे this.inputFile = argv[2] || eval('throw "this program requires an input file."');
दिमित्री

शायद, निश्चित नहीं है कि अगर मैं आपको समझ रहा हूँ तो समस्या का समाधान हो जाता है। आदर्श रूप से एक स्टैक ट्रेस को देख रहा होगा यदि आप रुचि रखते हैं कि वास्तव में विफलता कहाँ से आ रही थी। अन्यथा मुझे लगता है कि यह मान लेना सुरक्षित है कि आप किसी प्रकार की मूल विफलता संदेश को अपने उपयोगकर्ता को रिपोर्ट करना चाहते हैं।
केलमर

7

यदि आप नोडज का उपयोग कर रहे हैं, तो आप उपयोग कर सकते हैं

process.exit(<code>);

4
यदि यह Node.js के बारे में हो सकता है, प्रश्न टैग होता Node.js
FelixSFD

3
@FelixSFD: फिर भी इसने मेरी मदद की, क्योंकि मैं इसे ठीक से खोज रहा था, पूरी तरह से टैग की अवहेलना कर रहा था;)
DE

3

फायरबग और शानदार उपयोग करें ...

debugger;

और डिबगर को कभी भी आगे बढ़ने की अनुमति न दें। एक उचित Error, फेंकने की तुलना में क्लीनर ?


2
बिलकुल नहीं!
रॉल्फ

2

जावास्क्रिप्टdie में PHP के भाषा निर्माण का कोई सटीक समानता नहीं हैdiePHP System.exit()में जावा में बहुत अधिक समान है , जो वर्तमान स्क्रिप्ट को समाप्त करता है और शटडाउन हुक कहता है। जैसा कि कुछ उपयोगकर्ताओं ने सुझाव दिया; throw Errorकुछ मामलों में इस्तेमाल किया जा सकता है, हालांकि यह वर्तमान स्क्रिप्ट की समाप्ति की गारंटी नहीं देता है। आपके throwकथन के आसपास हमेशा एक अपवाद हैंडलिंग ब्लॉक हो सकता है- जब तक कि आप इसे शीर्ष स्तर के शीर्ष स्क्रिप्ट ब्लॉक पर नहीं बुलाते हैं, जो अंततः केवल उस स्क्रिप्ट ब्लॉक से बाहर निकलता है जिसे आप निष्पादित कर रहे हैं।

हालाँकि यह दूसरे ब्लॉक को यहाँ निष्पादित होने से नहीं रोकता है (प्रिंट्स हैलो):

<script type="text/javascript">
  throw new Error('test');
</script>
<script type="text/javascript">
  document.write("hello");
</script> 


1

JS में php die () के बराबर कोई फंक्शन एक्जिट नहीं है, अगर आप किसी फंक्शन का उपयोग नहीं कर रहे हैं तो आप केवल रिटर्न का उपयोग कर सकते हैं;

return;

0

आप झूठे का उपयोग कर सकते हैं; यह आपकी स्क्रिप्ट को समाप्त कर देगा।


3
केवल शीर्ष स्तर पर, संभवतः। PHP के मरने () को किसी भी स्तर पर बुलाया जा सकता है और इससे PHP दुभाषिया वहीं दूर चला जाएगा।
रॉल्फ

0

इस तरह का काम मरना चाहिए ();

function die(msg = ''){
    if(msg){
        document.getElementsByTagName('html')[0].innerHTML = msg;
    }else{
        document.open();
        document.write(msg);
        document.close();
    }
    throw msg;
}

0

विकास उद्देश्यों के लिए ग्लोबल डाई () फ़ंक्शन:

var die = function(msg) {
    throw new Error(msg);
}

डाई का उपयोग करें ():

die('Error message here');

-6
<script>
     alert("i am ajith fan");
     <?php die(); ?>
     alert("i love boxing");
     alert("i love MMA");
</script>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.