我目前正在尝试优化我们开发网站的框架,而困扰我的一件事就是我们的类的别名。现在我们有一个巨大的列表,列出了所有需要的类,我们必须根据需要添加/删除类。
我希望它尽可能自动化。我们有四个文件夹,每个网站都有使用的类,所以我尝试了以下内容:
$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
总是必须在全局范围内。
还有另一种方法可以使别名成为自动化过程,同时仍保持全局范围吗?
答案 0 :(得分:0)
来自http://php.net/manual/en/language.namespaces.importing.php#language.namespaces.importing.scope
导入是在编译时完成的,而不是运行时,所以它不能是块作用域。
您不能将use语句与if块括起来,也不能使用任何运行时事件来自动导入。
一种方法是使用预处理器自动扫描并添加该命名空间内的类。