调用“require_once”后未定义的索引

时间:2012-10-10 07:29:54

标签: php

我在一页中写道:

require_once("pdf/tab_activite.php");
...
foreach ($tab["activite"] as $key => $value) 
{
   ...
}

在tab_activite.php中有这样的:

...
$list = new activite($this->db);
$list->lireParNiveau($critere);
$tab["activite"] = $list->tableau ;
...

然后在日志中有:

[10-Oct-2012 10:30:48] PHP Notice:  Undefined index:  activite in C:\wamp\www\mp\models\objet.class.php on line 543
[10-Oct-2012 10:30:48] PHP Warning:  Invalid argument supplied for foreach() in C:\wamp\www\mp\models\objet.class.php on line 543

那么如何正确操作$ tab [“activite”]变量?

3 个答案:

答案 0 :(得分:1)

由于在函数内部调用require_once()$tab["activite"]仅存在于该函数的范围内。在使用global $tab;变量扩展其范围之前,将语句tab_activite.php添加到文件$tab,以便主程序也能看到它。

global $tab;
$list = new activite($this->db);
$list->lireParNiveau($critere);
$tab["activite"] = $list->tableau ;

编辑:如果多次调用该函数,可能会出现另一个问题,因为使用require_once()时文件只包含一次。如果是这种情况,请将require_once()替换为require(),看看是否有帮助。

答案 1 :(得分:0)

在$ tab [“activite”]

上执行var_dump
var_dump($tab["activite"]); 

如果它什么也没说,那么变量(或索引)就不存在了,你的文件被错误地包含了(搜索路径?)。

此外,您的错误日志暗示您的索引“活动”不存在,您确定它被称为?也许它是“激活”?希望这会有所帮助。

答案 2 :(得分:0)

您可以使用global全球化$tab变量。但是,如果没有必要,许多程序员不建议使用global

但在您的情况下,我认为您必须使用global作为$tab

http://php.net/manual/en/language.variables.scope.php