【问题标题】:Undefined variable error in PHP include file [duplicate]PHP包含文件中的未定义变量错误[重复]
【发布时间】:2012-10-29 23:19:32
【问题描述】:

可能重复:
Undefined variable problem with PHP function

谁能告诉我为什么我的 PHP 包含文件中不断收到未定义的变量错误消息?

<?php

$page = 1;

if (isset($_REQUEST['page'])) {
  $page = $_REQUEST['page'];
}

function phpRocks() {
  require("includes/dostuff.php");
}

if ($search) {
  phpRocks();
}

?>

然后在 dostuff.php 中:

<?php echo $page; ?>

这是我得到的错误:


注意:未定义变量:/dostuff.php 中的页面 上线 61

Attn down voters/close requesters:没有显示任何研究工作?为何如此?我还应该添加什么?我为此困惑了半个小时,找不到任何其他回答这个问题的帖子。我是否需要成为 PHP 专家才能发布问题(因此我不会发布任何问题!)??

【问题讨论】:

  • 可变范围。您在全局范围内声明,但从具有自己的本地 var 范围的函数中打开模板。
  • 你确定$page 正在设置吗?
  • phpRocks() 在哪里调用?
  • 虽然这个问题的作者和重复问题的作者都遇到了同样的问题,但这个问题的标题提到了 PHP 的包含机制,而另一个没有。我遇到了文件包含问题,重复的问题无法回答,因此它不是重复的 IMO。

标签: php variables include undefined


【解决方案1】:

马里奥明白了。这样做:

function phpRocks() {
    global $page;

    require("includes/dostuff.php");
}

【讨论】:

  • 这正是我所需要的。谢谢!
  • 阅读范围 Zoolander,这是你的问题
  • 感谢您的出色回答
【解决方案2】:

您必须像这样将变量声明为全局变量:

function phpRocks() {
global $page;           //set variable to global
require("includes/dostuff.php");
}

【讨论】:

    【解决方案3】:

    您将文件包含在函数中。因此,所有包含代码的范围都是函数的范围。函数内部不存在变量$page。传入:

    function phpRocks($page) {
        require "includes/dostuff.php";
    }
    
    phpRocks($page);
    

    【讨论】:

    • 为什么我是唯一一个支持注射的人而不是global spaghetti?
    • 其他人都将马里奥的评论放入答案表格中,以便获得声誉。你是唯一一个真正添加了相关内容的人。
    • 我不确定这是不是最好的解决方案。 $page 应该在这里是一个全局变量IMO ...它是在全局范围内创建的一个包含文件需要使用的变量。函数调用与此无关。另外,他将来可能希望将“真实”参数传递给函数,以便在dostuff.php 之外使用。这避免了两者之间的混淆。
    • @sgroves 它与函数有一切。该函数引入了一个新的范围,即 good。任何跨越该范围边界的值都应显式传入并返回。具有这些值的函数内部发生的任何事情都是无关紧要的。包含的文件“认为”变量是全局的也无关紧要,无论哪种方式,包含的文件都没有任何变化。您将函数绑定到它没有影响的周围范围。这就是代码耦合,应该始终避免。
    • 非常有帮助,谢谢...这是最好的答案
    【解决方案4】:

    在你的函数中添加全局变量

    function phpRocks() {
      global $page;
      require("includes/dostuff.php");
    }
    

    【讨论】:

      猜你喜欢
      • 2012-04-18
      • 1970-01-01
      • 2019-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      相关资源
      最近更新 更多