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

标签 php oop namespaces php-5.3 spl-autoload-register

我使用 namespace 作为类,如下所示,

class_tidy.php,

namespace foo;

class tidy {
    public function hello() {
        echo 'Hello';
    }
}

索引.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(); 

看起来更漂亮。但是有这个错误,

Parse error: syntax error, unexpected T_STRING, expecting T_VARIABLE or '$' ...

最佳答案

你不能。 PHP 语法使用 \ 作为命名空间。

事实上,php 仅将 T_PAAMAYIM_NEKUDOTAYIM(这是双冒号的名称)用于一件事,即在类名之后使用它来指定您想要该类的成员。

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

关于PHP:如何使用::而不是\访问命名空间类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10253001/

相关文章:

C++ 命名空间 'using' 类枚举的声明

PHP 全文搜索未按预期工作

php - Laravel 5.6 使用策略授权操作

php - 数据库模型验证

php - 我怎样才能只获得昨天的 php 命中率?

c# - 在类层次结构中传播属性值

java - 如何更好地初始化工厂中的对象?

c# - 在这种特定情况下,我应该如何建模我的代码以最大限度地重用代码?

c++ - 命名空间中的静态变量与非静态变量

variables - LESS 合并变量名并获取值