你能在PHP中定义你自己的命名空间分隔符吗?


Can you define your own Namespace Separator in PHP?

PHP中使用命名空间的例子…

use 'MyLibrary'Registry;
use 'MyLibrary'User;
use 'MyLibrary'Request;
namespace MyLibrary'Base
{
    class Base
    {
        public $registry;
        function __construct($registry)
        {
            $this->registry = $registry;
            $this->user = New User;
            $this->request = new Request;
            # code...
        }
    }
}

现在在c#中命名空间分隔符更像这样…

using MyLibrary.Registry;
using MyLibrary.User;
using MyLibrary.Request;
namespace MyLibrary.Base
{
    public partial class Base
    {
        public MyFunction(registry)
        {
            Code here
        }
    }
}

我知道有很多关于PHP命名空间分隔符的抱怨,糟糕到有些人甚至不使用它们,因为他们讨厌当前的反斜杠。

所以我很好奇,是否有任何方法可以定义自己的命名空间分隔符在PHP中使用?

恐怕不行,这是语言固有的。这样的事情无论如何都很难做到,因为其他符号已经在PHP中被赋予了意义()。是字符串连接,/是除法,*是乘法,等等)。

不是个答案。当然这只是开销的问题。除了前面提到的在编译时的重新声明之外,您还可以使用预处理器来达到期望的效果。(只是效果,不是真正的语言变化。)

例如,pihipi在PHP 5.3之前定义了一个标准的c++风格的命名空间分隔符。第二个例子是phpp预处理器,尽管它只允许启用/禁用名称空间。

在java类语言中使用.有点模棱两可,不能在预处理器中合理地模拟。它在运行时是可行的,但在PHP中不可行,并且必须在不同的标识符平面上做出让步。使用::是可行的,但还没有人为此烦恼。(也许Quercus PHP实现尝试过,不确定)