PHP:如何使用::而不是\来访问命名空间类?

lau*_*kok 2 php oop namespaces spl-autoload-register php-5.3

namespace用于下面这样的课程,

class_tidy.php,

namespace foo;

class tidy {
    public function hello() {
        echo 'Hello';
    }
}
Run Code Online (Sandbox Code Playgroud)

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();
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但我想知道我是否可以访问该课程,而不是

$test = new foo\tidy();
Run Code Online (Sandbox Code Playgroud)

但,

$test = new foo::tidy(); 
Run Code Online (Sandbox Code Playgroud)

哪个看起来更漂亮.但是有了这个错误,

解析错误:语法错误,意外T_STRING,期待T_VARIABLE或'$'......

Jas*_*per 5

你不能.PHP语法\用于命名空间.

事实上,php只使用T_PAAMAYIM_NEKUDOTAYIM(这是双冒号的名称),在类名后面使用它来指定你想要该类的成员.

我相信在这种方式中有一些模糊的细节阻止了PHP将它用作命名空间sperator,但我不知道哪个.(问题是,这意味着即使你从官方的PHP分支并制作了自己的版本,你也必须经历大量工作才能获得你想要的轻微语法更改.)

  • 他没有.它是在名称空间工作之前编写的,他们认为这将成为语法.未来证明他错了. (3认同)