-1

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

如果这是不可能的,那么请停止阅读并解释原因,因为我正在努力找出这里出了什么问题(可能是我已经醒了将近 24 小时的事实)

所以这就是我所拥有的:

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

define('SMF', 'SSI');

我有一个名为控制台的文件夹,其中包含一系列文件。从 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 和过程编程的混合,这会导致一些混乱。

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

谢谢。

4

2 回答 2

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修饰符在哪个范围内查找变量。

于 2015-11-04T08:03:16.000 回答
0

您定义的变量内容和括号之间缺少 ' 。也许这是一个复制和粘贴错误,但只是为了确定..

于 2015-11-04T08:12:24.947 回答