использовать 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 */