【问题标题】:Passing global scope var to included file将全局范围 var 传递给包含的文件
【发布时间】:2014-05-05 15:17:22
【问题描述】:

我正在尝试让一个全局变量显示在包含的文件中。我将在这里复制路径:

$var = array();

funcA 
{
    global $var;
    $var = array('some'=>'values');

    funcB
    {
        global $var;

        //$var prints('some'=>'values')
        include_once('myfile.php');
    }
}

funcA 
{
    $var = array('some'=>'values');

    funcB($var)
    {
        //$var prints('some'=>'values')
        include_once('myfile.php');
    }
}
myfile.php:
//prints own content (is included)
//$var is empty, whether declared global or not.

我错过了一步吗?

编辑:在“不使用全局变量”的投票让我没有实际答案之前,即使 $var 作为参数从 funcA 传递,上述方法仍然不起作用到funcB。我已经编辑了代码来演示。

该文件是通过文件路径而不是 url 包含的,但确实位于另一个目录中 - 这相关吗?

编辑:即使在初始化变量之前包括文件时,该值也不会传递给该文件。问题似乎在于 include 方法本身。我正在使用 include_once() 并提供文件的完整绝对路径。

【问题讨论】:

  • 你的问题是什么,为什么嵌套函数:?
  • 请避免使用全局变量。
  • var 变量不会传输到包含的文件。这些函数实际上不是嵌套的,这就是它们的调用方式(funcB 是从 funcA 中调用的)。

标签: php scope


【解决方案1】:

为什么不作为参数传递和/或使用返回值?您的应用程序不需要回复全局变量,这通常是设计缺陷的标志。

function getVar() {
    return array('some'=>'values');
}

function printVar($var) {
    include_once('myfile.php');
    // print_r($var);
}

$var = getVar();
printVar($var);

如果您的问题比示例显示的要大,您应该查看PHP's OOP 并开始使用类/对象。查看一些框架,以帮助您深入了解。

【讨论】:

  • 谢谢山姆。我已经编辑了我的问题,以表明即使将变量作为参数传递,甚至在 include 调用之前使用一些虚拟值简单地声明时,故障仍然存在。
  • @Eamonn 你能用myfile.php 的内容更新你原来的问题吗?或者包含一个test.php 文件,其内容为<?php var_dump($var); ?>。根据文档,include() 应该继承包含它的行的变量范围(因此它的变量范围为printVar(),其中包括$var)。
  • 这似乎是一些棘手的范围问题 - 在包含工作之前声明的一些函数,但在根级别定义的常量没有。我想我需要沿着这条路回去,找出哪里出了问题。但是,为什么事先声明的内容不会显示出来,这是我的新内容...
  • 根据documentation:“当一个文件被包含时,它包含的代码继承了包含发生的行的变量范围。调用文件中该行的任何可用变量都将是从那时起,在被调用文件中可用。但是,包含文件中定义的所有函数和类都具有全局范围。”听起来我的简化示例应该可以工作,不确定其他地方的变量范围是否存在复杂问题
  • 没问题,很高兴你知道了。
猜你喜欢
  • 2018-09-02
  • 2014-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-18
  • 2010-12-08
  • 1970-01-01
相关资源
最近更新 更多