PHP命名空间混淆中的Classpath等价物

时间:2013-02-09 15:13:04

标签: php namespaces

我公司的产品(也是我)也在使用PHP 5.2。

我想切换到5.4,所以我第一次用5.4进行基本测试。

根据PSR 0,我按照以下文件夹结构进行简单测试:

Projectfolder
   |
   + index.php
   |
   + lib
      |
      + vendor
          |
          +  mylib
               |
               + MyClass.php (Having namespace \mylib )

以下是我们的代码,名为MyClass.php

namespace \mylib;
class MyClass {
    public $testA;
    public function MyClass(){
        $this->testA = "test entry";
    }
}

我的问题是如何在index.php文件中获取MyClass的实例?

在命名空间之前,我本可以这样做:

include "lib/vendor/mylib/MyClass.php";
$myClass = new MyClass();
echo $myClass->testA;

现在使用命名空间,我尝试以下代码:

<?PHP
use mylib\MyClass
$myClass = new MyClass();
echo $myClass->testA;

但是,我收到以下错误:

  

致命错误:未找到类'mylib \ MyClass'...

我的问题是,如何让PHP查看文件夹lib\vendor中的命名空间文件。

在Java中,我们通常定义一个类路径。 PHP中是否有类似的设置?

如命名空间教程中的一些示例所示,我需要包含所有要包含所有类的PHP文件(10,20,50任意数字)。我想不应该是这种情况,或者在PHP中引入命名空间的整个目的都将被打败。

1 个答案:

答案 0 :(得分:2)

即使是WITH命名空间,您也必须包含这些文件。 命名空间用于在包含它们之后引用这些类。

所以你可以

include "lib/vendor/mylib/MyClass.php";
use mylib;
\mylib\myClass::myFunction();

没有new MyClass();

有关详细示例,请参阅http://php.net/manual/en/language.namespaces.php