【问题标题】:How can I force the execution of a PHP file in a global scope?如何强制在全局范围内执行 PHP 文件?
【发布时间】:2011-09-26 04:19:08
【问题描述】:

我有一个 php 文件,比如 include.php,它有以下内容:

<?php
$myVar = "foo";
?>

现在,我想创建一个名为 GlobalInclude 的类,它可以在全局范围内包含一个文件:

class GlobalInclude {
    public function include( $file="include.php" ) {
        #do something smart
        include $file
        #do something smart
    }
}

在当前形式中,$myVar 变量仅在包含函数的范围内可用。我想做类似的事情:

GlobalInclude::include( "include.php" );
echo $myVar;

输出 呵呵

关于如何实现这一点的任何想法?

【问题讨论】:

  • 我的 2 美分:不要这样做。没有人喜欢全局变量
  • 是否有特殊原因要将包含在类中而不是简单地包含在相关文件中?
  • @KingCrunch。我正在使用一些在全球范围内的旧代码。我不能让它面向对象。
  • @丹尼尔。是的。解释真正的用例有点困难,但我需要在类中调用 include。
  • 这能回答你的问题吗? How to achieve "require_global"?

标签: php


【解决方案1】:

非常丑陋的黑客:

$GLOBALS[$myVar] = $myValue;

在 include.php(或您实际使用的任何文件)中。

【讨论】:

    【解决方案2】:

    编辑:对不起,我误读了您的原始帖子。您可以通过使用get_defined_vars 来获取当前范围内的所有变量并返回它们:

    public function includeAndGetVars($file) {
      include $file;
      return get_defined_vars();      
    }
    

    然后在调用函数后,使用extract 将结果转储到当前范围:

    extract(includeAndGetVars("include.php"));
    echo $myVar;
    

    【讨论】:

      【解决方案3】:

      我想我会在这里更新答案。 我将我的应用程序条目包装在一个 try catch 中,并抛出一个带有文件名的IncludeInGlobalException 作为消息。然后,在 catch 块中,我包含了该文件。

      【讨论】:

        猜你喜欢
        • 2014-02-22
        • 2011-05-07
        • 1970-01-01
        • 1970-01-01
        • 2021-11-12
        • 1970-01-01
        • 2010-10-21
        • 2018-04-01
        • 1970-01-01
        相关资源
        最近更新 更多