我已经安装了Propel ORM与Composer,但我不能创建一个新的模型,因为PHP脚本不在PHP类的同一目录中。
我在Test.php
中有Test
类,我想从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 BaseTest as BaseTest;
class Test extends BaseTest
{
}
Test
是一个名称空间,实际上与文件夹结构无关。命名空间具有类似于的文件夹结构,但不能使用相对路径。
PSR-4自动加载器,比如现在大多数Composer包使用的,以一种非常接近文件夹结构的方式映射它们的命名空间,但它们仍然是完全独立的概念。
如果在文件中声明了一个名称空间,那么所有后续名称都被认为是相对于该路径的。如:
namespace Foo;
class Bar {}; // FooBar
如果你想在当前命名空间之外使用,你需要声明完整的路径,从开始,它表示根命名空间。如:
namespace Foo;
use Test
class Bar { // FooBar
public function test() {
$test = new Test();
$dbh = new PDO();
}
}
在composer中设置你想要的所有文件夹。json文件。这样的:
"autoload": {
"psr-4": {
"App\": "app/",
"Config\": "config/"
},
"files": [
"config/config.php"
]
},
搜索编曲器。Json来了解更多关于它的信息。对于上面的例子,我选择了名称空间"App"one_answers";Config"目录"app/"one_answers"配置/";在我的项目的根目录下,选择文件"config/config.php"