2013-10-04 8 views
7

फ़ंक्शन घोषणा के अंदर इसका उपयोग करने के लिए PHP goto के लिए वैश्विक लेबल (चर जैसे कुछ) को परिभाषित करने का कोई तरीका है। मैं निम्न कार्य करना चाहते हैं:फ़ंक्शन के अंदर गेटो का उपयोग करें php

function myFunction() { 
    if (condition) { 
    goto someLine; 
    } 
} 


someLine: 
// .... 

myFunction(); 

जब मैं इस कोड का उपयोग यह कहता है

PHP Fatal error: 'goto' to undefined label "someLine" 

मुझे पता है कि यह goto कथन का उपयोग करने के लिए अनुशंसित नहीं है। लेकिन मुझे अपने मामले में इसकी ज़रूरत है। मुझे पता है कि शायद हमेशा वहाँ goto के विकल्प हैं, बस मेरे मामले में यह कोड थोड़ा आसान और समझने

+0

तो आप फ़ंक्शन के बाहर कूदना चाहते हैं? यह संभव नहीं है। आप क्या हासिल करने का प्रयास कर रहे हैं? – Jim

+0

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

+0

आप * के लिए * क्या उपयोग कर रहे हैं? गोटो का उपयोग करने के लिए लगभग हमेशा एक विकल्प होता है। – Jim

उत्तर

6

आप एक समारोह के गोटो नहीं बाहर मेरा मानना ​​है कि कर सकते हैं बनाना होगा: http://php.net/manual/en/control-structures.goto.php

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

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

उदाहरण:

function foo(a) { 
    if (a==1) { 
     return 1; 
    } elseif (a==3) { 
     return 2; 
    } else { 
     return 3; 
    } 
} 

switch (foo(4)) { //easily replaceable with elseif chain 
    case 1: echo 'Foo was 1'; break; //These can be functions to other parts of the code 
    case 2: echo 'Foo was 3'; break; 
    case 3: echo 'Foo was not 1 or 3'; 
} 
2

में या एक समारोह से बाहर कूद करने का कोई तरीका नहीं है। लेकिन चूंकि आप बताते हैं कि आपको इसकी आवश्यकता है, यहां एक वैकल्पिक मार्ग है।

function myFunction() { 
    if (condition) { 
    return true; 
    } 
    return false; 
} 


someLine: 
// .... 

$func = myFunction(); 
if($func == true) goto someLine; 
+0

हाँ, इस तरह से वह विकल्प है जो मैं भी करता हूं, लेकिन मेरे कार्य की स्थिति थोड़ा जटिल है और गोटो अंदर फ़ंक्शन का उपयोग कोड को आसान बना देगा। धन्यवाद – dav

+2

यह वास्तव में इस मामले में कोड "आसान" के बारे में नहीं है। प्रोग्रामिंग चीजों के अलावा सही तरीके से एक और विकल्प नहीं है - जिसका अर्थ है गोटो का उपयोग नहीं करना। – BetaBlaze

2

जैसा कि पहले बताया गया था कि आप नहीं कर सकते। "मुझे इसकी ज़रूरत है" के लिए, मुझे इस पर बहुत संदेह है। आपके पास जो भी कोड है, वह कुछ है: आसानी से उस फ़ंक्शन में बनाया जा सकता है जिसे आप आवश्यकतानुसार दूसरे से कॉल कर सकते हैं।

0

हाँ वहाँ एक रास्ता जब तक कि समारोह में एक ही php फ़ाइल पर घोषित किया जाता है या यदि शामिल किया गया है है एक और स्क्रिप्ट पर अपनी,

पर करने के लिए someline तुम्हारा दोस्त की कि गोटो कोड वापस जाने के लिए है कूद करने के लिए सबसे अच्छा तरीका ताकि यदि फ़ंक्शन को रिटर्न वैल्यू कहा जाता है .. उम्मीद है कि यह

function foo($b="30") 
{ 
$a=30; 
if($a==intval($b)) 
return "someline:goto 
someline"; 
} 

try{ 
eval(foo()); 
} 
catch(IOException $err) 
{ 
exit($err); 
} 

/*someline is somewhere here 
for example */ 
+0

आप किसी फ़ंक्शन से गेटो को अपने आप से बाहर नहीं कर सकते हैं, लेकिन आप इसके बजाय एक eval वापस कर सकते हैं या बस एक साधारण स्ट्रिंग रिटर्न "गेटो सोलाइन" वापस कर सकते हैं लेकिन eval (foo()) जैसे फ़ंक्शन कॉल का मूल्यांकन करना सुनिश्चित करें: जहां foo रिटर्न मिल गया, मुझे लगता है कि काम करने वाले दोस्त बेहतर प्रयास करें –

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