我将namespace
用于下面的类,
class_tidy.php,
namespace foo;
class tidy {
public function hello() {
echo 'Hello';
}
}
的index.php,
class MyAutoloader
{
public static function load($className)
{
$parts = explode('\\', $className);
require 'classes/class_'.end($parts) . '.php';
}
}
spl_autoload_register("\MyAutoloader::load");
$test = new foo\tidy();
$test->hello();
它完美无缺,但我想知道我是否可以访问该课程,而不是
$test = new foo\tidy();
但是,
$test = new foo::tidy();
哪个看起来更漂亮。但是有了这个错误,
解析错误:语法错误,意外T_STRING,期待T_VARIABLE 或'$'......
答案 0 :(得分:5)
你做不到。 PHP语法使用\
作为名称空间。
事实上,php只使用T_PAAMAYIM_NEKUDOTAYIM(这是双冒号的名称),在类名之后使用它来指定你想要该类的成员。
我确实在这方面有一些模糊的细节阻止PHP将它用作命名空间编写器,但我不知道哪个。 (问题是,这意味着即使你从官方的php分支并制作了自己的版本,你也必须经历大量工作才能获得你想要的轻微语法更改。)
答案 1 :(得分:1)
php团队选择\作为命名空间分隔符。即使你认为::更好,你也无法改变它。 我可以问你为什么这么做?
答案 2 :(得分:1)
阅读官方手册:http://php.net/language.namespaces.nested
不支持::
作为命名空间分隔符,因为它已经被使用(因此保留为scope resolution operator
Foo::$bar;
同样有趣:相应的RFC https://wiki.php.net/rfc/namespaceseparator