PHP 的 assert 语句的行为与大多数其他语言不同。
assert('return false');
实际上评估字符串,然后断言其结果(假)。
它没有将参数与 true 进行比较,而是通过检查参数的额外步骤,如果它是一个评估它的字符串,则执行比较。
确实很奇怪。
我的问题不在于理解行为,我的问题是想出这种行为的正当理由,尤其是。因为你现在必须做额外的思考工作......“这是否评估为字符串?”。
字符串断言的优点是当断言检查关闭时开销较小,并且在断言失败时包含断言表达式的消息。这意味着,如果您将布尔条件作为断言传递,该条件将不会显示为您可能使用 assert_options() 函数定义的断言函数的参数,在调用该处理函数之前,条件将转换为字符串,并且boolean FALSE 被转换为空字符串。
我猜这只是为了让他们不需要对语言的特定部分进行特殊处理。我相信在 PHP 中,如果您将字符串视为表达式,它会自动评估。这样你就可以做一些事情,比如传递一个函数的名称并尝试“调用”它并且它可以工作(没有指针的函数指针:-P)。
编辑:请参阅Jakob 的答案,以获取 PHP 文档中有关断言的相关引用。