日期:2014-05-16  浏览次数:20514 次

一个面向对象方面的很基础的小白问题,求指点
在一个类内(其实是thinkPHP的控制器内类),有很多个方法(不是全部方法)会用到一些语句,我希望能将其整合到一个地方(比如一个方法里边?)到处调用一下,求教该怎么写

贴出现在的代码样例(是有错误的)


class AbcAction extends BbcAction{
    public function init(){
        $model = M("table1");
        $a = $model-> where("id = 1") -> getField("id");   //$a = 1
        $this -> assign("a",$a);
    }

    public function test(){
$this->init()
echo $a;  
$model -> find(1);
//希望在这里能用到上边的$a和$model(实际上这样写是报错的,因为这是init内部的变量?
//init向前台传递的这个值,好像是可以的
    } 
}


问题很小白,求不吝赐教(眼下就要用到,来不及去系统的学习面向对象了..)
面向对象 方法内的变量

------解决方案--------------------
设置两个属性试试看行吗?$this->model=$model;$this->a=$a;这样你这个类都可以调用了,但是得先调用init()方法。
------解决方案--------------------

class AbcAction extends BbcAction{

public $model;
public $a;
    public function init(){
        $this->model = M("table1");
        $this->a = $this->model-> where("id = 1") -> getField("id");   //$a = 1
        $this -> assign("a",$this->a);
    }

    public function test(){
$this->init();//如果是等同__construct为构造函数,在实例化AbcAction时就会执行的话,可不调用
echo $this->a;  
$model -> find(1);
//希望在这里能用到上边的$a和$model(实际上这样写是报错的,因为这是init内部的变量?
//init向前台传递的这个值,好像是可以的
    } 
}

------解决方案--------------------
如果 init 方法是默认执行的,而 test 方法中要使用到 init 方法产生的中间结果
那么 init 方法产生的中间结果至少是要在类中全局的
class AbcAction extends BbcAction{
    public function init(){
        $this->model = M("table1");
        $this->a = $model-> where("id = 1") -> getField("id");   //$a = 1
        $this -> assign("a",$this->a);
    }
 
    public function test(){
//    $this->init()
    echo $this->a;  
    $this->model -> find(1);
    //希望在这里能用到上边的$a和$model(实际上这样写是报错的,因为这是init内部的变量?