簡體   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