我已经使用Propel ORM安装了Composer但我无法创建新模型,因为PHP脚本与PHP类不在同一目录中。
我在Test
内有Test.php
课,我想从subfolder/index.php
使用它。请注意,类Test
然后使用Base/Test
中的Base/Test.php
,因此使用require()
不是一个选项,因为Base/Test
只是继续使用由<?php
use Test;
?>
生成的更多类作曲家。
传统上,我应该做以下事情:
Test
但由于父文件夹中有<?php
use ../Test;
?>
,我不能这样做,显然
My Project
|-- Base
| `-- Test.php <-- File referenced by `Test` class
|-- subfolder
| `-- index.php <-- File I want to use `Test` from
`-- Test.php <-- File containing `Test` class
不起作用。
我的文件夹结构:
subfolder/index.php
实际代码:
<?php
use \Test;
require __DIR__ . '/../vendor/autoload.php';
$test = new Test();
?>
:
Test.php
<?php
use Base\Test as BaseTest;
class Test extends BaseTest
{
}
:
public string photoPath{ get; set; }
答案 0 :(得分:3)
Test
是一个名称空间,与文件夹结构完全无关。命名空间有一个文件夹 - 之类的结构,但你不能使用相对路径。
PSR-4自动加载器,例如目前大多数Composer程序包使用的内容,以非常匹配文件夹结构的方式映射其命名空间,但它们仍然是完全独立的概念。
如果您在文件中声明了名称空间,则所有后续名称都被视为相对于该路径。例如:
namespace Foo;
class Bar {}; // \Foo\Bar
如果要使用当前命名空间 之外的内容,则需要声明完整路径,从\
开始,表示 root 命名空间。例如:
namespace Foo;
use \Test
class Bar { // \Foo\Bar
public function test() {
$test = new Test();
$dbh = new \PDO();
}
}