<?php
3;
在PHP中有什么样的陈述?
我无法想出一个有用的案例......
答案 0 :(得分:7)
你是对的,它是“无用的”(更正式地,它没有效果 - 加载整数三然后丢弃)。它自然地来自两个事实:
3
是一个有效的表达式(您无法使用它,例如在$x < 3
中,如果不是)。禁止使用无效的语句既困难(需要非常聪明的AST分析,也许,对于更复杂的情况,还有一些AST转换,例如常量折叠以使它们可见),不可能完全对(总会有一些错过的东西;在动态语言中加倍)并且很少有用。
请注意,几乎所有其他语言都有这种权衡 - 要么实现复杂的编译器传递以禁止它(可能会遗漏更多细微的情况),要么忽略它。这甚至适用于在某种程度上只有 表达式的语言,当然除了没有语句,你会调用忽略值的表达式无用。
答案 1 :(得分:1)
这可能是一个让它不被允许会比它的价值更多的工作。它显然没有任何用处,所以程序员可能会避免这种事情。
要考虑的一件事是:
some_function("foo");
和
3;
在语法上是一样的。
答案 2 :(得分:0)
它没有用,但允许。
每一段代码都在PHP中表达为3。 (ex $ v = 17也是值为int(17)的表达式,print 17
也是值为int(1)的表达式)
所以代码是
<?php expr;expr;expr; ?>
为什么不允许这样做?
答案 3 :(得分:0)
AFAIK,你可以在JS和Python中做到这一点,除了JS,PHP / Python我什么都不知道但是它应该适用于大多数,你可以安全地运行这三个中的任何一个{{ 1}}或3;
,请注意您在Python语句末尾不需要半冒号
答案 4 :(得分:0)
在编程语言中,它是否有用取决于你所写的内容。
编译器(虽然php不是一个编译的lang)会检查它们是否是任何syntex错误。并且没有理解它是否有用。所以对于php它是有效的。
如果我们在JAVA中编写相同的代码,我们将生成
未解决的编译问题: 语法错误,插入“AssignmentOperator Expression”以完成表达式 赋值的左侧必须是变量
iN c#IT will PRODUCE
错误1只能将赋值,调用,递增,递减和新对象表达式用作语句
不同的语言有不同的“类型检查”。