我原本一直問(並回答)幾次面前的問題1,2,3,4:我怎麼調用在同一類不同的函數中定義的變量 - 但不能讓下面的工作:訪問變量的CodeIgniter類
class my_model extends CI_Model {
public $myvar;
public function test1()
{
$this->myvar = "Hello world";
}
public function test2()
{
return strtoupper($this->myvar);
//And have tried:
// return my_model::test1()->$myvar
}
}
更改test1
充當setter
功能(並調用函數來訪問的變量)不工作;改變我的test1
到:
public test1()
{
$this->myvar = "Hello world";
return $this->myvar;
}
和test2
到:
public function test2()
{
$a = $this->test1();
return strtoupper($a);
}
This question有controller methods in CodeIgniter work slightly differently from regular PHP class methods
評論。 model
類也是這種情況:如果是這樣,我需要首先調用test1
(並且其他方法中的變量不可訪問),或者有其他我不明白的地方?
活生生的例子
這就是我真正想要做的事情 - 請告訴我,如果有更好的方法來做到這一點!
我要分手了其運行select *
查詢並返回一個count
查詢的方法,因爲我正在使用CI的QueryBuilder
類這似乎是顯而易見的解決方案:
class my_model extends CI_Model {
public function __construct()
{
$this->load->database();
}
public function test1()
{
return $this->db->get('Table1');
}
public function test2()
{
return $this->test1()->result_array();
}
public function test3()
{
return $this->test1()->num_rows();
}
}
然而,cale b發表評論,這可能會感覺有點jenky - 它會怎麼做呢?
感謝您的解釋(我主要是一個python傢伙 - 而python並不傾向於需要setter/getters)!我仍然不明白爲什麼我在我的問題中提供的鏈接中的例子(例如http://stackoverflow.com/a/2483693/889604)能夠工作 - 這個回答'echo's設置在另一個函數中的變量沒有在類的頂部聲明它或沒有首先使用getter的同一個類 – ChrisW
關鍵在於你在引用的問題結尾處的OP語句中:「在上面的例子中,我想調用$ var這是一個變量**是在前一個函數內定義的**但這不起作用,所以我該如何做到這一點? - 該變量已在前一個函數中定義。所以,大概在OP的代碼中,「setter」函數已經在其他地方被調用了。 –
Eek,對不起 - 我想我剛剛意識到這篇文章裏發生了什麼 - 第一類中的getter在被創建之後(被稱爲「create」類)在第二類*中被調用。所以 - 我想我說的是,調用同一類中定義的變量的唯一方法是使用setter/getter方法?我也用我真正想要做的事情更新了我的問題 - 這是您的選擇4的可接受使用,還是有更好的方法? – ChrisW