PHP:如何自动包括&实例化类?

时间:2015-04-20 04:12:57

标签: php oop

我脚本的同一目录中有一个PHP文件列表。它们都遵循命名约定(例如class.foo.php)。当我的脚本运行时,我希望它包含这些文件。这很简单,可以执行scandir个文件,在结果数组中的每个项目中进行测试,然后include文件。

问题是如何在我的脚本中创建这些类的实例(也是一个类)?文件class.foo.php中会包含class Foo。我需要创建一个Foo的实例(有时只是访问一个静态方法)。我不能在正在运行的脚本中执行此操作,因为它不知道自动包含的类。

get_included_files没用,因为它返回了类链中的所有包含文件(我只对运行脚本中包含的类感兴趣)。

也许我会以错误的方式解决这个问题。我有什么办法“自动包含”类文件并在运行脚本中使用它们?

2 个答案:

答案 0 :(得分:4)

创建自动加载功能并注册:spl_autoload_register

正确的自动加载功能将在实例化类时加载相应的文件。

来自php.net的例子:

function my_autoloader($class) {
    include 'classes/' . $class . '.class.php';
}

spl_autoload_register('my_autoloader');

答案 1 :(得分:2)

您可以使用__autoload()魔法。见这个例子:

./ myClass.php

<?php
class myClass {
    public function __construct() {
        echo "myClass init'ed successfuly!!!";
    }
}

?>

./的index.php

<?php
// we've writen this code where we need
function __autoload($classname) {
    $filename = "./". $classname .".php";
    include_once($filename);
}

// we've called a class ***
$obj = new myClass();
?>

输出:

myClass init'ed successfuly!!!

阅读更多内容:

  

http://php.net/manual/en/function.autoload.php