在一个类内(其实是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内部的变量?  
     //init向前台传递的这个值,好像是可以的  
     }   
 } 
   感谢
不过如果需要共用的这个方法有几十行语句,十来个中间变量需要在其他地方用到,都用$this->xx 来写感觉会比较麻烦
是我的需求出了问题还是只能如此?有没有更好的方法? 
   是吗?  
 函数(方法)内的变量是私有的,你不把他变成公有的怎么能用  
 我从你的钱夹里拿钱化,你乐意吗? 
   是吗?  
 函数(方法)内的变量是私有的,你不把他变成公有的怎么能用  
 我从你的钱夹里拿钱化,你乐意吗?
我好喜欢看你说话的。  
 你的话不单止能帮我们新人解决问题,而且还很有内涵。 
   是吗?  
 函数(方法)内的变量是私有的,你不把他变成公有的怎么能用  
 我从你的钱夹里拿钱化,你乐意吗?
有没有办法把这一段代码块,引用到需要共用的地方,而不使用调用共用函数的方式呢?  这样不就可以直接使用代码里的内容了
说起来这样应该也不叫面向对象了,只是简单的复用. 
    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);  
  }
不知道这样是不是更适合你的需求。。。。 
    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);  
  }
不知道这样是不是更适合你的需求。。。。
感觉这样太折腾了... 还不如干脆每个需要的地方复制一份这样的代码.. 
   当然可以,但这就不是 tp 的风格了  
 thinkphp 主张一事一议,所以有用一个 m 函数就载入一个数据表实例的简单写法
如果你不喜欢这种写法,大可不必再去用它  
 如果你在他的框架内搭建自己小窝,日后很可能出现严重的协调性问题  
 毕竟你是不能随性地修改他的内核的
是吗?  
 函数(方法)内的变量是私有的,你不把他变成公有的怎么能用  
 我从你的钱夹里拿钱化,你乐意吗?
有没有办法把这一段代码块,引用到需要共用的地方,而不使用调用共用函数的方式呢?  这样不就可以直接使用代码里的内容了
说起来这样应该也不叫面向对象了,只是简单的复用.
   
 
   