использовать goto внутри функции php

есть ли способ определить глобальную метку (что-то вроде переменных) для PHP goto, для того, чтобы использовать его внутри объявления функции. Я хочу сделать следующее:

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


someLine:
// ....

myFunction();

когда я использую этот код, он говорит

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

Я знаю, что не рекомендуется использовать goto заявление. Но мне это нужно в моем случае. Я знаю, что, возможно, всегда есть варианты goto, просто в моем случае это будет сделать код немного проще и понятнее

4 ответов


вы не можете перейти за пределы функции, которую я считаю:http://php.net/manual/en/control-structures.goto.php

Прямая Цитата: Это не полный неограниченный Гото. Метка цели должна находиться в одном файле и контексте, что означает, что вы не можете ни выпрыгнуть из функции или метода, ни прыгнуть в него.

это может быть связано с тем, что php анализируется и выпрыгивание из функции вызовет утечку памяти или что-то еще, потому что это было никогда не закрывается должным образом. Кроме того, как все говорили выше, на самом деле вам не нужен goto. Вы можете просто возвращать разные значения из функции и есть условие для каждого. Goto - это просто супер плохая практика для современного кодирования (приемлемая, если вы используете basic).

пример:

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';
}

нет способа войти или выйти из функции. Но поскольку вы заявляете, что вам это нужно, вот альтернативный маршрут.

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


someLine:
// ....

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

как было сказано ранее, вы не можете. Что касается "мне это нужно", я очень сомневаюсь в этом. Какой бы код у вас ни был в someLine: можно легко превратить в функцию, которую при необходимости можно вызвать из другого.


да, есть способ, пока эта функция объявлена в том же файле php или включена, если ее на другом скрипте,

лучший способ перейти к someline-это вернуть код goto вашего чувака, чтобы, если функция называется возвращаемым значением.. надеюсь, это поможет

 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 */