类未知的实例

时间:2015-02-26 22:23:20

标签: php class oop

我希望你能解决我刚遇到的问题。我试图让所有存储在每个类都知道的文件夹/classes中的类。这是我尝试的方式:我创建了一个名为Main的类,它存储/ classes-folder的每个类的实例:

<?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;

?>

我用户的每个其他类都扩展了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

&GT;

我期望var_dump($this->gI('Session))to return an instance of类会话but it's Null`。有什么想法吗?我还有其他任何想法让全球所有课程都知道,我可以提出建议!

谢谢!

1 个答案:

答案 0 :(得分:0)

使用composer

将所有类放在带有命名空间 MyNameSpace src 文件夹中,如下所示:

的src / test.php的

<?php

namespace MyNameSpace;

class Test {}

composer.json文件:

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

在PHP文件中使用命令“composer update”,然后使用 require_once“vendor / autoload.php”; ,而不是src。

示例index.php:

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

$test = new MyNameSpace\Test;

示例外部包:

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

作曲家需要联盟/网址