[英]“Call to undefined function” error when calling member function from constructor
好吧,這令人沮喪,但我想可能有點疏忽。
我有這個PHP類:
class SearchModel
{
private $searchOptions;
public function __construct()
{
$this->searchOptions = populateSearchOptions();
}
public function getSearchOption()
{
return $this->searchOptions;
}
private function populateSearchOptions()
{
$this->searchOptions = array(
// values....
);
}
}
當我實例化此類時,PHP返回:
Fatal error: Call to undefined function populateSearchOptions() in SearchModel.php ...
更改時:
$this->searchOptions = populateSearchOptions();
至:
$this->searchOptions = $this->populateSearchOptions();
投訴已消失,但$searchOptions
的內容為NULL
。
所以...如果我從構造函數內部以這種方式調用populateSearchOptions()
,請實例化該類並嘗試輸出數組的內容:
$this->model = new SearchModel();
// Output contents of model->searchOptions
輸出為NULL。 但是,當我這樣做時(不必費心嘗試從構造函數中調用populateSearchOptions()
):
$this->model = new SearchModel();
$this->model->populateSearchOptions();
// Output contents of $this->model->searchOptions
它根據需要輸出分配給$this->model->searchOptions
的值。
有人知道這是怎么回事嗎? 我只想能夠從SearchModel
構造函數調用populateSearchOptions()
。
將構造函數從
public function __construct()
{
$this->searchOptions = populateSearchOptions();
}
至
public function __construct()
{
$this->populateSearchOptions();
}
1)始終在php中使用$this
來調用非靜態類方法和變量
2)之前的結果為null,因為populateSearchOptions
函數未返回值,因此您實際上在函數中為其設置了一個值,然后立即將其設置為null
。
或者,您可以將populateSearchOptions
函數更改為
private function populateSearchOptions()
{
return array(
// values....
);
}
並有效地做同樣的事情。
model-> searchOptions的輸出內容為NULL
它為null,因為它是一個私有變量
嘗試將searchOptions公開,那么會很好:
class SearchModel
{
public $searchOptions;
public function __construct()
{
$this->searchOptions = $this->populateSearchOptions();
}
private function populateSearchOptions()
{
$this->searchOptions = array(
// values....
);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.