class 未知的实例

Instance unknown to class

我希望你能帮助我解决我刚刚遇到的问题。我正在尝试获取存储在每个 class 都知道的文件夹 /classes 中的所有 classes。这是我尝试的方法:我创建了一个名为 Main 的 class,它存储了 /classes 文件夹中每个 class 的实例:

<?php

// Include classes:
$dir = './classes/';
$dh = opendir($dir);
while ($file = readdir($dh)) {
    if (is_file($dir . $file) AND substr($file, 0, 2) == 'c_') {
        include_once($dir . $file);
    }
}

class Main {

    PUBLIC function __construct() {
        foreach ($GLOBALS['className'] as $key => $value) {
            $this->{$value} = new $value;
        }
    }

    PUBLIC function gI($classObject) { return $this->{$classObject}; }

}

$Main = new Main;

?>

每隔 class 我用户扩展 class Main 是这样的:

include_once('./c_main.php');

class Kernel extends Main {

    public function hello() { 
        var_dump($this->gI('Session')); // /classes/c_session.php
    }

...

这是 c_session.php 的样子:

<?php

include_once('./c_main.php');

class Session extends Main {

    ...

}

$className[] = 'Session'; // so $GLOBALS['className'] stores every class

?>

我预计 var_dump($this->gI('Session))to return an instance ofclass Sessionbut it'sNull`。任何想法为什么?如果您有任何其他让所有 class 全球知名的想法,我欢迎您提出建议!

谢谢!

使用composer:

将所有 类 放入命名空间为 MyNameSpacesrc 文件夹中,如下所示:

src/Test.php

<?php

namespace MyNameSpace;

class Test {}

composer.json 文件:

{
    "name": "me/test",
    "type": "project",
    "autoload": {
        "psr-4": {
            "MyNameSpace\": "src"
        }
    }
}

在不在 src 中的 PHP 文件中使用命令 "composer update" 然后 require_once "vendor/autoload.php";

示例index.php:

<?php
require_once "vendor/autoload.php";

$test = new MyNameSpace\Test;

示例外部包:

从命令行安装外部代码的示例:

作曲家要求league/url