PHP学习笔记

PHP学习笔记-goto语句

2020-06-10  本文已影响0人  赵客缦胡缨v吴钩霜雪明

最近遇到了了这样一段有趣的代码:

<?php
if (true){
    echo "expr evaluates to true...",PHP_EOL;
}else surprise:{
    echo "expr evaluates to false...",PHP_EOL;
}

这段代码会输出什么呢?是输出if的内容还是else的内容?

但是他却if和else一起输出了:

首先我们应该了解一下surprise:是什么鬼?

这个其实是PHP的goto语句。

goto语句

PHP的goto是5.3版本新增的特性,goto 操作符可以用来跳转到程序中的另一位置。

该目标位置可以用目标名称加上冒号来标记,而跳转指令是 goto 之后接上目标位置的标记:

<?php
goto a;
echo 'Foo';

a:
echo 'Bar';
?>

以上代码会输出:Bar

那么当没有goto操作符跳转程序的时候程序会如何执行呢?

<?php
echo 'Foo';

a:echo 'Bar';
?>

以上代码会输出:FooBar

我们发现没有goto时 Bar仍然可以正常输出,但是失去了goto语句的跳转效果。

其实a:就是一个goto的标记,而上文中的{}只是用于标记代码块的。

所以上文讲到的代码我们可以理解为:

<?php
if (true){
    echo "expr evaluates to true...",PHP_EOL;
}else;
surprise:{
    echo "expr evaluates to false...",PHP_EOL;
}

suprise作为独立语句块,并不能跟前面的语句关联,else 直接中断,相当于else后面没有执行语句,else后面的2个括号,也只是goto标记的代码块,跟else毫无关联。

我们也可以将suprise替换为任意的标记名都是可以输出的。

上一篇下一篇

猜你喜欢

热点阅读