php 在父文件夹中使用`class
php `use` class in parent folder
我已经安装了 Propel ORM with Composer,但我无法创建新模型,因为 PHP 脚本与 PHP class 不在同一目录中。
我在 Test.php
中有 class Test
,我想从 subfolder/index.php
开始使用它。请注意 class Test
然后使用 Base/Test.php
中的 Base/Test
,因此在这里使用 require()
不是一个选项,因为 Base/Test
只是继续使用甚至更多 class 由作曲家生成。
传统上,我应该执行以下操作:
<?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
{
}
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();
}
}
只需在 composer.json 文件中设置您想要的所有文件夹。像这样:
"autoload": {
"psr-4": {
"App\": "app/",
"Config\": "config/"
},
"files": [
"config/config.php"
]
},
搜索 composer.json 以了解更多信息。对于上面的示例,我为项目根目录中的目录“app/”和“config/”选择了命名空间“App”和“Config”,并选择了文件“config/config.php " 在我的项目中进行任何操作之前 运行。
我已经安装了 Propel ORM with Composer,但我无法创建新模型,因为 PHP 脚本与 PHP class 不在同一目录中。
我在 Test.php
中有 class Test
,我想从 subfolder/index.php
开始使用它。请注意 class Test
然后使用 Base/Test.php
中的 Base/Test
,因此在这里使用 require()
不是一个选项,因为 Base/Test
只是继续使用甚至更多 class 由作曲家生成。
传统上,我应该执行以下操作:
<?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
{
}
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();
}
}
只需在 composer.json 文件中设置您想要的所有文件夹。像这样:
"autoload": {
"psr-4": {
"App\": "app/",
"Config\": "config/"
},
"files": [
"config/config.php"
]
},
搜索 composer.json 以了解更多信息。对于上面的示例,我为项目根目录中的目录“app/”和“config/”选择了命名空间“App”和“Config”,并选择了文件“config/config.php " 在我的项目中进行任何操作之前 运行。