使用include_once会导致未定义的变量通知

时间:2012-12-09 11:22:25

标签: php

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

如果我将include_once替换为include,则通知会消失。但为什么? include_once应加载config.php文件。

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

1 个答案:

答案 0 :(得分: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];
}