一個物件導向方面的很基礎的小白問題,求指點
在一個類內(其實是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向前台傳遞的這個值,好像是可以的
}
}
------解決方案--------------------
是嗎?
函數(方法)內的變數是私人的,你不把他變成公有的怎麼能用
我從你的錢夾裡拿錢化,你樂意嗎?
------解決方案--------------------
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 函數就載入一個資料表執行個體的簡單寫法
如果你不喜歡這種寫法,大可不必再去用它
如果你在他的架構內搭建自己小窩,日後很可能出現嚴重的協調性問題
畢竟你是不能隨性地修改他的核心的
引用:
Quote: 引用:
是嗎?
函數(方法)內的變數是私人的,你不把他變成公有的怎麼能用
我從你的錢夾裡拿錢化,你樂意嗎?
有沒有辦法把這一段代碼塊,引用到需要共用的地方,而不使用"調用共用函數"的方式呢? 這樣不就可以直接使用代碼裡的內容了
說起來這樣應該也不叫物件導向了,只是簡單的複用.