有人可以给我一个很好的理由来解释为什么 php 中的断言会这样吗?
PHP 的断言语句的行为与大多数其他语言不同。
assert('return false');
实际上评估字符串,然后断言其结果 (false)。
它不是将参数与 true 进行比较,而是执行检查参数的额外步骤,如果它是一个字符串,则对其进行评估,然后执行比较。
确实很奇怪。
我的问题不在于理解这种行为,我的问题是为这种行为找到一个有效的理由,尤其是。 因为你现在必须做额外的脑力工作来思考......“它的计算结果是字符串吗?”。
PHP's assert statement doesn't behave like most other languages.
assert('return false');
actually evaluates the string and then asserts its result (false).
Instead of comparing the parameter to true, it goes through the extra step of examining the argument, and if it's a string evaluating it, then performing the comparison.
Very strange indeed.
My problem is not in understanding the behaviour, my problem is coming up with a valid reason for this behaviour, esp. since you now have to do the extra mental work of thinking... "does that evaluate to a string?".
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
来自 http://www.php.net/manual/en/function.assert。 php
from http://www.php.net/manual/en/function.assert.php
我猜想这只是为了他们不需要对语言的特定部分进行特殊处理。 我相信在 PHP 中,如果您将字符串视为表达式,它会自动计算。 通过这种方式,您可以执行诸如仅传递函数名称并尝试“调用”它之类的操作,并且它可以工作(没有指针的函数指针:-P)。
编辑:参见Jakob 的回答,来自 PHP 文档中关于断言的相关引用。
I would guess it simply is so they didn't need to special case a particular part of the language. I believe that in PHP if you treat a string like an expression is it evaluated automatically. This way you can do things like just pass the name of a function and try to "call" it and it works (function pointers without the pointers :-P).
EDIT: see Jakob's answer for a relevant quote from the PHP docs about assert as well.