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

use*_*948 -1 php

我有一个名为"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];
    }   
Run Code Online (Sandbox Code Playgroud)

Nik*_*iko 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];
}
Run Code Online (Sandbox Code Playgroud)