我安装了一个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和程序编程的混合,导致一些混淆。
我的问题不是“什么是变量范围?”
感谢。
答案 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;粘贴错误,但只是为了确保..