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

时间:2011-12-22 21:15:05

标签: php namespaces

在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的命名空间分隔符?

2 个答案:

答案 0 :(得分:5)

我害怕你不能,它与语言紧密相连。无论如何这样的事情真的很难做到,因为其他符号已经在PHP中赋予了它们的含义(。是字符串concatinate,/是divide,*是multiply等)。

答案 1 :(得分:2)

不是不是答案。当然,这只是一个开销问题。除了在编译时提到的重新声明,您可以使用预处理器来获得所需的效果。 (只是效果,而不是实际的语言变化。)

exmaple pihipi在PHP 5.3之前定义了一个标准的C ++ esque命名空间分隔符。作为第二个例子,有phpp preprocessor,虽然只允许启用/禁用名称空间。

在Java类语言中使用.有点暧昧,无法在预处理器中合理地模拟。它在运行时是可行的,但不是在PHP中,并且不是没有关于不同标识符平面的让步。使用::是可行的,但没有人打扰过。 (也许Quercus PHP实现尝试过,不确定。)