父文件夹中的php`use`类

时间:2015-09-25 20:25:15

标签: php namespaces composer-php propel

我已经使用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; }

1 个答案:

答案 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();
  }
}