0

我有一个名为“config.php”的文件,其中包含一个名为$unit_names. 在一个类中,我有以下方法,它通过它的 id 返回单位名称。我对表中的所有行都使用此方法,但问题config.php仅包含在对该方法的第一次调用中。下一个电话会导致通知:undefined variable $unit_names...

如果我更换通知消失include_onceinclude但为什么?include_once应该加载config.php文件。

public function get_unit_name($unit_id) 
    {   
            include_once("config.php");
            return $unit_names[$unit_id];
    }   
4

1 回答 1

7

include_once至少不会加载指定文件一次,它只会加载一次!如果您第二次调用该函数,则该文件已被包含,因此不会再次包含,因此会出现错误消息。

这样做的想法是,当您包含包含函数或类定义的文件时使用include_once/ require_once,即如果多次加载它们会产生错误的文件。如果可以加载文件两次或更多次,请始终使用include()而不是include_once().

考虑这样的事情(以节省每次重新包含文件的成本):

private $unit_names = null;

public function get_unit_name($unit_id) {   
    if ($this->unit_names === null) {
        include("config.php");
        $this->unit_names = $unit_names;
    }

    return $this->unit_names[$unit_id];
}
于 2012-12-09T11:24:24.010 回答