PHP ' use '类在父文件夹



我已经安装了Propel ORM与Composer,但我不能创建一个新的模型,因为PHP脚本不在PHP类的同一目录中。

我在Test.php中有Test类,我想从subfolder/index.php中使用它。请注意,类Test然后使用Base/TestBase/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"

相关内容

  • 没有找到相关文章

最新更新