首页 > 代码库 > 设计一个简单的mvc映射
设计一个简单的mvc映射
在工作时,有一套框架,并不是很适合做后台,为此我在这个框架加了简单的mvc映射
首先为方便可以随时new自己想要的类,注册自己的__autoload方法,这里封装成一个类,当然类里面要封装好查找路径,注册的时候就是调用内部的loader成员方法:
spl_autoload_register(array($this, ‘loader‘));
现在,我在Action文件夹(前面已经会自动加载这个文件夹相应的类文件),、
创建一个抽象类Action_Abstract,里面有抽象方法run,后期有action的类如Action_List就继承它,并默认必须实现run方法
在抽像类中,我想写一个display方法,显示view层,这样在List类就可以直接调用 $this->display(‘templateName‘)
为了让view层可以直接获取到action对象的栈上变量,即比如在List的run方法中,设置$this->param = ‘test‘;
在view层就可以直接通过 $test 获取到,我在抽象类的display方法
foreach($this as $k=>$v){
$($k) = $v;
}
include($path.$templateName.‘.html‘)
即可实现,但这样有个问题,在抽象类的一些私有或保护成员变量,内部的派生类对象继承了下来,这里就会给那些变量也赋值了
有没有什么方法可以获取到内部派生类对象的成员变量的属性?
答案是用映射
$rf = new ReflectionObject($this);
$properties = $rf->getProperties();
foreach($properties as $property){
if($property->isPublic()){ //只输出public成员变量到模板
$keyName = $property->getName();
${$keyName} = $this->$keyName;
}
}
这样就只让public变量输出了