这很令人沮丧,但可能是我想象中的一些疏忽。
我有这个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
的值。
任何人都知道这里发生了什么?我想简单地从populateSearchOptions()
构造函数中调用SearchModel
。
答案 0 :(得分:3)
从
更改构造函数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....
);
}
并有效地做同样的事情。
答案 1 :(得分:0)
model-> searchOptions的输出内容为NULL
它为null,因为它是一个私有变量
尝试将searchOptions设为公开然后它会很好:
class SearchModel
{
public $searchOptions;
public function __construct()
{
$this->searchOptions = $this->populateSearchOptions();
}
private function populateSearchOptions()
{
$this->searchOptions = array(
// values....
);
}
}