使用OO应用程序获取全局变量

时间:2015-11-04 07:43:29

标签: php smf smf-forum

我安装了一个SMF论坛,这是一个非OO应用程序。我希望在论坛的目录中创建一个额外的应用程序,其中包括来自SMF的SSI文件,然后使用SMF中的函数,但是在面向对象的设置中。

如果这是不可能的,那么请在这里停止阅读并解释原因,因为我正在努力解决这里的错误(可能是我已经醒了将近24小时)

所以这就是我所拥有的:

SMF有一个文件,SSI.php - 当包含时,这会设置一个全局变量的加载,并设置

的定义
define('SMF', 'SSI');

我有一个名为console的文件夹,它有一系列文件。从index.php,我调用我的Servlet文件,它有

require_once '../SSI.php';

class Servlet
{

    public function __construct(){

    }

    public function processRequest(){
        echo SMF;
        var_dump($context) //This is the global variable that should be set
    }
}

这会输出SSI,然后输出未定义的变量错误。

这可能是非常明显的,但为什么定义被设定而不是全局背景?如果我在课外做这个,它就可以了。

谢谢!

- 编辑 -

只是为了解释为什么这不是链接问题的重复......除了这是一个关于特定范围问题和特定错误的具体问题之外,我真的不认为它需要很多解释。应用程序是OO和程序编程的混合,导致一些混淆。

我的问题不是“什么是变量范围?”

感谢。

2 个答案:

答案 0 :(得分:2)

如我的评论中所述,您可以在调用它之前放置global $context;,但这实际上是不好的做法,可能会导致大型项目出现大问题。更好的选择是将所需的变量传递给被调用的方法,例如:

<?php
require_once '../SSI.php';

class Servlet
{

    public function __construct(){

    }

    public function processRequest($context){
        echo SMF;
        var_dump($context);
    }
}
$servlet = new Servlet();
$servlet->processRequest($context);

它在您的代码示例中不起作用的原因是因为在实例化类时,它会为全局范围创建并行范围,因此除非您放置,否则您的$context变量不存在于类中它通过参数或你告诉php使用global修饰符查找变量的范围。

答案 1 :(得分:0)

你有一个失踪的&#39;在您定义的变量内容和括号之间。也许它是副本&amp;粘贴错误,但只是为了确保..