time()
为什么InvalidArgumentException
不需要限定为全局命名空间?
我怀疑论点是:必须限定每一个std lib函数都会过于繁琐,但同样的论点也可以应用于类。是否有任何技术原因需要合格?
作为一个例子
<?php namespace aname;
class Baz {
function setBar($foo) {
if ($foo < 0) {
throw new \InvalidArgumentException("Some message");
}
}
function setFoo($foo) {
if ($foo < 0) {
throw new InvalidArgumentException("Some message");
}
}
}
echo "here is the current timestamp: " . time() . PHP_EOL;
$baz = new Baz();
try {
$baz->setBar(-1);
} catch (\InvalidArgumentException $e) {
echo $e->getMessage() . PHP_EOL;
}
$baz->setFoo(-1);
输出。
here is the current timestamp: 1416722687
Some message
PHP Fatal error: Class 'aname\InvalidArgumentException' not found in /<long/path>/nstest.php on line 10
另外,为什么我运行此代码时不会出现解析错误?我的印象是namespaces resolution发生在PHP调用编译时。
根据当前的导入规则,在编译期间翻译所有不合格和限定名称(非完全限定名称)。例如,如果命名空间A \ B \ C作为C导入,则对C \ D \ e()的调用将转换为A \ B \ C \ D \ e()。