自定义框架 的一个小问题

manbudezhu 发布于 2016/06/01 15:16
阅读 140
收藏 0
自己练习写一个小框架,遇到这样一个问题:
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');
遇到一个问题,载入的类里有几个文件有命名空间,使用上面的方法写成一个文件后,会报错。因为不能保证所有的命名空间都在最前面,这种情况怎么处理了?请求高手赐教,谢谢
加载中
0
leo108
leo108

namespace ns1 {

//代码块

}

namespace ns2 {

//代码块

}

namespace {

//原本没有ns的代码块

}

0
leo108
leo108

可以参考symfony的app/bootstrap.php.cache文件

0
manbudezhu
manbudezhu

引用来自“leo108”的评论

namespace ns1 {

//代码块

}

namespace ns2 {

//代码块

}

namespace {

//原本没有ns的代码块

}

挺好的思路,但是如果第一个文件没有名空间,且载入顺序无法自由调整的话.这种有问题了吧.
leo108
leo108
回复 @manbudezhu : 参考https://github.com/symfony/symfony/blob/master/src/Symfony/Component/ClassLoader/ClassCollectionLoader.php
manbudezhu
manbudezhu
回复 @leo108 : 我上面的代码生成的~boot.php文件有问题了,因为前面载入的文件没有名空间,且有输出.能把我的代码修正一下吗,谢谢
leo108
leo108
没有问题的,没有命名空间的就按我给你的第三段操作就行
返回顶部
顶部