繁体   English   中英

从构造函数调用成员函数时出现“调用未定义函数”错误

[英]“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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM