解决方案 »

  1.   

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

  2.   


    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向前台传递的这个值,好像是可以的
        } 
    }
      

  3.   

    如果 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内部的变量?
        //init向前台传递的这个值,好像是可以的
        } 
    }
      

  4.   

    感谢不过如果需要共用的这个方法有几十行语句,十来个中间变量需要在其他地方用到,都用$this->xx 来写感觉会比较麻烦是我的需求出了问题还是只能如此?有没有更好的方法?
      

  5.   

     public function test()
    {
           //在这里封装一个curl方法直接去请求下面的getData()方法
           //$url='http://192.168.1.1/模块/控制器/getData()';
           curl_setopt($ch, CURLOPT_URL, $url);
     } 
    public function getData()
    {
          //可以把数据都放在这个方法里
          echo json_encode($data);
     } 不知道这样是不是更适合你的需求。
      

  6.   

    当然可以,但这就不是 TP 的风格了
    thinkPHP 主张一事一议,所以有用一个 M 函数就载入一个数据表实例的简单写法如果你不喜欢这种写法,大可不必再去用它
    如果你在他的框架内搭建自己小窝,日后很可能出现严重的协调性问题
    毕竟你是不能随性地修改他的内核的
    有没有办法把这一段代码块,引用到需要共用的地方,而不使用"调用共用函数"的方式呢?  这样不就可以直接使用代码里的内容了说起来这样应该也不叫面向对象了,只是简单的复用.