在PHP命名空间混淆中的类路径相当于
问题描述:
我公司的产品(&我也是)使用PHP 5.2。在PHP命名空间混淆中的类路径相当于
我想切换到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;
不过,我得到以下错误:
Fatal error: Class 'mylib\MyClass' not found ...
我的问题是,我该如何让PHP查看文件夹lib\vendor
中的命名空间文件。
在Java中,我们通常定义一个类路径。 PHP中有类似的设置吗?如命名空间教程中的一些示例所示,我需要包含包含要使用的所有类的所有PHP文件(10,20,50任意数字)。我想这不应该是这样的,或者在PHP中引入命名空间的全部目的将被击败。
答
即使对于命名空间,您也必须包含这些文件。 命名空间用于在包含它们之后引用这些类。
,这样就可以
include "lib/vendor/mylib/MyClass.php";
use mylib;
\mylib\myClass::myFunction();
没有new MyClass();
你有使用绝对路径试过吗? – fedorqui 2013-02-09 15:14:30
不是我想的。你能解释一下吗? – 2013-02-09 15:16:42
偶尔'include(“$ _ SERVER [DOCUMENT_ROOT] /lib/whatever.php”);'是一个好的选择;使路径绝对相对于webserver/vhost基目录。或者考虑使用自动加载器,或者使用可怕的PSR-0折叠,或者使用类路径映射缓存。 – mario 2013-02-09 15:18:33