自动类包括和实例创建PHP


Auto Class including and Instance creation PHP

当前在一个应用程序中,我包含一个目录中的类(任何数量的类都可以放入这个目录中)。虽然我想更进一步,能够从这些文件中创建一个类实例或类名数组 class …当类文件放入文件夹中时,这是否可能?下面是我目前用来包含文件的代码(php4 compat)

// Include custom field types, as drop-ins
$include_files = (array) glob( METAMAKER_FIELDS_DIR."*.php" );
if( is_array($include_files) ) {
    foreach($include_files as $filename) {
        if (!empty($filename) && strstr($filename, 'php')) {
            include_once($filename);
        }
    }
}

加入我们的21世纪,使用自动加载。特别推荐这样做,因为使用您的方法要确保以正确的顺序解决每个依赖项会更加复杂。只是不要这样做。

如果包含了类文件,可以使用get_declared_classes()来获取类名列表。根据对象的构造函数的不同,构造对象可能会稍微困难一些。如果没有构造函数接受(必需的)参数,则可以遍历列表并为每个构造一个参数。否则,您可能需要使用反射来计算需要传递给每个类的参数。

你可能想问问自己为什么要这样做,你是否真的需要每个类的一个实例。听起来你可能需要的是某种依赖注入或服务定位器。

如果您的类名和文件名相同,您可以从$filename创建一个$className,并创建一个实例并将其存储在$dict[md5($filename)] = new $className

但是你在重新发明自动加载