解决php类继承关键性问题

Pader2009年7月29日 发表于 网页与编程 php vgotfaster 继承

这段时间一直被 PHP 的类的属性的方法的继承而困扰,VgotFaster 的开发也因这个问题被卡住了,这两天放下了 VgotFaster 框架的开发在做自己的个人主页的页面,估计 VgotFaster  不会马上出来了,我就随便写一个主页的简单的 PHP 对象来作为主页主站的框架了,结果写着写着也就不那么简单了,完全就是一个框架了,晕呼,我怎么搞的到处都是面向对象和框架啊,不过在视图对控制器的属性和方法访问时也就是类的属性和方法继承时还是碰到这个问题,今晚不知为何心平气也和,终于把这个问题给搞定,让视图可以直接访问控制器的属性和方法了,这次主页的框架写的没有 VgotFaster 那么强的自定义和功能,但是却解决了关键性问题,所以 VgotFaster 得重构了,汗呀,第一个版本还没出来就重来了。继续等待吧。

关于这个框架已经抛弃了对 PHP4 的支持,下面发上主页小框架解决关键性问题的 PHP5 的 __get 和 __call 魔术方法吧。

PHP代码片段

/*  
    关键性控制器属性获取  
    @ create 0:29 2009-7-29  
*/  
public function __get($kName)   
{   
    if(isset($this->V->controller->$kName)) {   
        return $this->V->controller->$kName;   
    } else {   
        return $this->V->$kName;   
    }   
}   
  
/*  
    关键性控制器方法调用  
    @ create 1:05 2009-7-29  
    @ update 1:22 2009-7-29  
*/  
public function __call($kName,$kValues)   
{   
    if($kValues) {   
        $vCounts = count($kValues);   
        $argEval = '';   
        for($i=0;$i<$vCounts;$i++) {   
            $argEval .= ',$kValues['.$i.']';   
        }   
        $argEval = substr($argEval,1);   
        eval('$a = $this->V->controller->$kName('.$argEval.');');   
        return $a;   
    } else {   
        return $this->V->controller->$kName();   
    }   
}


评论 共有 2 条评论

  • Pader 博主 2009-8-6

    [quote=waichun]嘿嘿,第一次路过,以后常来你这里参观参观. PHP的经验不少吗!~[/quote] 谢谢顶!

  • waichun 2009-8-5

    嘿嘿,第一次路过,以后常来你这里参观参观. PHP的经验不少吗!~