[MixMVC]MixMVC3.1] 中 ActionView基类的提议

用了一段时间的公司框架,发现在controller上动态加上的属性,在view里要额外判断才能正确无误的输出,那么能利PHP5类的特性来简化代码呢?我实现了一下,测试可行。还请大师审视!let me go!
我在Controller里写入一个demoController.php代码如下:

<?php
class DemoController extends __Application {
    public function indexAction() {
        return false;
    }

    public function testaAction() {
        $this->dynamicPro = '这是动态添加的属性';
        return $this->render(self::VIEW, 'demo');
    }

    public function testbAction() {
        return $this->render(self::VIEW, 'demo');
    }
}

然后View层里新建demo.phtml

<?php
echo '这里输出属性: '.$this->$dynamicPro;

然后我们浏览器里分别运行:testa 控制器和testb 控制器
http://localhost/MST_v3.1/demo/testa
http://localhost/MST_v3.1/demo/testb
testa:

error_testa

testb:

error_testb

测试结果得出:
在controller中,动态添加的属性在View中没加入判断会报出个Undefind Property错误提示!那怎么解决?一种当然是代码上去控制,另一种是开头所说的PHP5中的魔术方法!

第一种解决方式:
我们先把View中的demo.phtml代码改为如下:

<?php
$dynamic = isset($this->dynamicPro)? $this->dynamicPro : '';
echo '这里输出属性: '. $dynamic;

好了,刷新testb控制器,如下图,没报错!
ok_testb

 
第二种解决方式:
现在重点要说的 我们要简化代码,所以要修改下框架的lib\MST_v3.1\MST\ActionView.php 在类中加入下面__get和__set魔术方法:

    public function __get($property_name) {
        if(isset($this->$property_name)) {
            return($this->$property_name);
        }else {
            return(NULL);
        }
    }
    public function __set($property_name, $value){
        $this->$property_name = $value;
    }

好了View中的demo.phtml改回原来的代码方式:

<?php
echo '这里输出属性: '.$this->dynamicPro;

然后刷新你的浏览器,不会再报错,这样免去了我们判断动态加入的属性判断,还算挺方便的!

文章分类 MixMVC, 经验分享
4 comments on “[MixMVC]MixMVC3.1] 中 ActionView基类的提议
  1. Sam Zhou说道:

    报错是为了更好的调试,什么都不报错,你怎样去调试……

    规范一下写法就可以免除你说的情况,例如声明一下变量的默认值。

  2. Ken AU说道:

    看到大湿这么一说,按规范写的提议,我又对大湿的敬仰犹如滔滔江水连绵不绝!

  3. 黄思凯说道:

    小弟没用过这框架,不知道是怎么样的!
    如果看代码的话,用魔术函数,那应该不需要判断了吧
    我觉得这样简化
    public function __get($property_name) {
    return(NULL);
    }

    • Ken AU说道:

      if(isset($this->$property_name)) {
      return($this->$property_name);
      }else {
      return(NULL);
      }

      当然不能像你这样说法简化,你看条件判断,如果有设置这个属性,返回这个属性,而你的直接返回null

发表评论


Warning: Use of undefined constant XML - assumed 'XML' (this will throw an Error in a future version of PHP) in /var/www/wp/code/wp-content/plugins/wp-syntaxhighlighter/wp-syntaxhighlighter.php on line 1048