我有一个名为“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];
}
答案 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];
}