自己练习写一个小框架,遇到这样一个问题:
DEBUG为false时,将所有载入的核心类文件生成一个文件~boot.php载入。
使用了如下的代码:
private static function LoadCore(){
// 创建载入核心类数组
$arr=array(
CORE_PATH.'/Log.php',
CORE_PATH.'/App.php',
CORE_PATH.'/Controller.php',
CORE_PATH.'/SmartyView.php',
FUNCTION_PATH.'/functions.php',
);
$str='';
foreach ($arr as $v) {
//将所有的文件写到一个字符串里面
$str.=trim(substr(file_get_contents($v), 5,-2));
include_once $v;
}
$str="<?php\r\n".$str;
file_put_contents(TEMP_PATH.'/~boot.php',$str)||die('it is false');
遇到一个问题,载入的类里有几个文件有命名空间,使用上面的方法写成一个文件后,会报错。因为不能保证所有的命名空间都在最前面,这种情况怎么处理了?请求高手赐教,谢谢
namespacens1{
//代码块
}
namespacens2{
//代码块
}
namespace{
//原本没有ns的代码块
}
可以参考symfony的app/bootstrap.php.cache文件
Thenamespacens1{
//代码块
}
namespacens2{
//代码块
}
namespace{
//原本没有ns的代码块
}
回复 @manbudezhu:参考https://github.com/symfony/symfony/blob/master/src/Symfony/Component/ClassLoader/ClassCollectionLoader.php回复 @leo108:我上面的代码生成的~boot.php文件有问题了,因为前面载入的文件没有名空间,且有输出.能把我的代码修正一下吗,谢谢没有问题的,没有命名空间的就按我给你的第三段操作就行版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。