首页 > 代码库 > 设计一个简单的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变量输出了