有人可以给我一个很好的理由来解释为什么 php 中的断言会这样吗?

发布于 2024-07-14 21:39:25 字数 279 浏览 5 评论 0原文

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

悲歌长辞 2024-07-21 21:39:26

字符串断言的优点是断言检查关闭时开销较小,断言失败时消息包含断言表达式。 这意味着,如果您将布尔条件作为断言传递,则此条件将不会显示为您可能使用assert_options()函数定义的断言函数的参数,在调用该处理函数之前,该条件将转换为字符串,并且boolean FALSE 被转换为空字符串。

来自 http://www.php.net/manual/en/function.assert。 php

The advantages of a string assertion are less overhead when assertion checking is off and messages containing the assertion expression when an assertion fails. This means that if you pass a boolean condition as assertion this condition will not show up as parameter to the assertion function which you may have defined with the assert_options() function, the condition is converted to a string before calling that handler function, and the boolean FALSE is converted as the empty string.

from http://www.php.net/manual/en/function.assert.php

眼趣 2024-07-21 21:39:26

我猜想这只是为了他们不需要对语言的特定部分进行特殊处理。 我相信在 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文