3

PHP 的 assert 语句的行为与大多数其他语言不同。

assert('return false');实际上评估字符串,然后断言其结果(假)。

它没有将参数与 true 进行比较,而是通过检查参数的额外步骤,如果它是一个评估它的字符串,则执行比较。

确实很奇怪。

我的问题不在于理解行为,我的问题是想出这种行为的正当理由,尤其是。因为你现在必须做额外的思考工作......“这是否评估为字符串?”。

4

2 回答 2

11

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

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

于 2009-03-15T18:12:18.193 回答
1

这只是为了让他们不需要对语言的特定部分进行特殊处理。我相信在 PHP 中,如果您将字符串视为表达式,它会自动评估。这样你就可以做一些事情,比如传递一个函数的名称并尝试“调用”它并且它可以工作(没有指针的函数指针:-P)。

编辑:请参阅Jakob 的答案,以获取 PHP 文档中有关断言的相关引用。

于 2009-03-15T18:04:18.617 回答