代码之家  ›  专栏  ›  技术社区  ›  Allain Lalonde

有人能给我一个很好的理由来解释为什么在PHP中断言的行为是这样的吗?

  •  3
  • Allain Lalonde  · 技术社区  · 15 年前

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

    assert('return false'); 实际计算字符串,然后断言其结果(false)。

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

    确实很奇怪。

    我的问题不在于理解行为,我的问题是为这种行为找到一个合理的理由,特别是因为你现在必须做额外的脑力工作来思考……”它的计算结果是字符串吗?”.

    2 回复  |  直到 6 年前
        1
  •  11
  •   Jakob Stoeck    15 年前

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

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

        2
  •  1
  •   Community leo1    7 年前

    我愿意 猜测 简单地说,他们不需要对语言的某个特定部分进行特殊处理。我相信在PHP中,如果您像对待表达式一样对待字符串,它会自动进行计算。通过这种方式,您可以做一些事情,比如只传递一个函数的名称,并尝试“调用”它,它就会工作(没有指针的函数指针:-p)。

    编辑:参见 Jakob's answer 对于php文档中有关assert的相关引用。