"调用未定义的函数"从构造函数调用成员函数时出错

时间:2014-06-18 05:06:51

标签: php

这很令人沮丧,但可能是我想象中的一些疏忽。

我有这个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

2 个答案:

答案 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....
        );
    }
}