PHP命名空间混乱中的类路径等效


Classpath equivalent in PHP namespace confusion

我公司的一个产品(我也是)使用的是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的实例?

在Namespace之前,我本可以这样做:

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中引入命名空间的整个目的就会失败。

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

这样你就可以

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

new MyClass();

参见http://php.net/manual/en/language.namespaces.php详细示例