php没有 goto,PHP学习笔记-goto语句

ba615021fcaf

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

if (true){

echo "expr evaluates to true...",PHP_EOL;

}else surprise:{

echo "expr evaluates to false...",PHP_EOL;

}

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

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

ba615021fcaf

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

这个其实是PHP的goto语句。

goto语句

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

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

goto a;

echo 'Foo';

a:

echo 'Bar';

?>

以上代码会输出:Bar

ba615021fcaf

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

echo 'Foo';

a:echo 'Bar';

?>

以上代码会输出:FooBar

ba615021fcaf

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

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

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

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替换为任意的标记名都是可以输出的。

ba615021fcaf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值