这是'断言'忽略当前命名空间的错误吗?

时间:2014-01-31 17:08:53

标签: php exception-handling namespaces assert

以下问题是否应被视为正常行为或错误?

<?php
namespace Ns;

function func ()
{
    echo "Hello\n";
    return true;
}

func(); // ok
assert('func()'); // "Call to undefined function func()"

1 个答案:

答案 0 :(得分:1)

assert我假设其行为方式与eval相同,因为它会在传递给它的代码进行评估时将执行切换到全局命名空间。在调用中指定名称空间的工作方式与预期相同:

<?php
namespace Ns;

function func ()
{
    echo "Hello\n";
    return true;
}

func(); // ok
assert('Ns\func()');

我认为这是正常行为; assert是一个内置函数,您基本上是将一个字符串传递给它进行评估。当执行传递到assert函数内部时,它将位于完全不同的命名空间(主要是全局命名空间)。