【发布时间】:2019-04-13 17:17:06
【问题描述】:
使用 PHP 7.0,请考虑以下代码:
<?php
namespace A {
$closure = function() {
echo __NAMESPACE__;
};
}
namespace B {
$closure = function () {
echo __NAMESPACE__;
};
}
namespace C {
$closure();
}
对我来说,预期的输出是:
PHP Notice: Undefined variable: closure
但不知何故,结果是
B
然后考虑下面的代码:
<?php
namespace A {
$closure = function() {
echo __NAMESPACE__;
};
}
namespace B {
$closure = function () {
echo __NAMESPACE__;
};
}
namespace C {
\A\$closure();
}
现在知道(但还不理解)第一个示例的行为,我的预期输出将是:
A
但是我得到了
PHP Parse error: syntax error, unexpected '$closure' (T_VARIABLE), expecting identifier (T_STRING)
这种行为完全让我感到困惑。
问题第 1 部分:有人可以解释一下我在第一个示例中的期望有什么问题吗? 问题第 2 部分:行为如何与第一个示例一致?
【问题讨论】:
-
在命名空间中,您可以定义类、常量和函数。变量不是类,不是函数,不是常量。
-
对于您的最后一个示例,我猜(但我不确定)
$closure变量在其命名空间末尾超出范围。但我不知道您如何在第一个示例中获得“B”。
标签: php namespaces closures