别名(使用...... as ...)目录中的所有文件

时间:2016-01-27 11:54:53

标签: php alias

我目前正在尝试优化我们开发网站的框架,而困扰我的一件事就是我们的类的别名。现在我们有一个巨大的列表,列出了所有需要的类,我们必须根据需要添加/删除类。

我希望它尽可能自动化。我们有四个文件夹,每个网站都有使用的类,所以我尝试了以下内容:

$directories = array(
    '../classes/site/database', 
    '../classes/site/utils', 
    '../classes/creabea/utils', 
    '../classes/creabea/database'
);

foreach($directories as $dir){
    $dir_contents = new DirectoryIterator($dir);
    foreach($dir_contents as $item){
        if(!$item->isDot()){
            if($item->isDir()){
                foreach(new DirectoryIterator($item->getPath().'/'.$item->__toString()) as $file_l2){ 
                    if(!$file_l2->isDot()){
                        $temppath = preg_replace('(\.\./)', '', $file_l2->getPath());
                        $path = preg_replace('/\//g', '\\', $temppath);
                        $classname = preg_replace('\.class\.php', '', $file_l2->__toString());
                        use $path.'\\'.$classname;
                    }
                }
            } else {
                $temppath = preg_replace('(\.\./)', '', $item->getPath());
                $path = preg_replace('/\//g', '\\', $temppath);
                $classname = preg_replace('\.class\.php', '', $item->__toString());
                use $path.'\\'.$classname;
            }
        }
    }
}

最后它不起作用,因为你无法在函数或循环内部调用use或类似的东西:use总是必须在全局范围内。

还有另一种方法可以使别名成为自动化过程,同时仍保持全局范围吗?

1 个答案:

答案 0 :(得分:0)

来自http://php.net/manual/en/language.namespaces.importing.php#language.namespaces.importing.scope

  

导入是在编译时完成的,而不是运行时,所以它不能是块作用域。

您不能将use语句与if块括起来,也不能使用任何运行时事件来自动导入。

一种方法是使用预处理器自动扫描并添加该命名空间内的类。