PHP类引用多个文件的混淆

时间:2010-12-22 20:49:24

标签: php class reference new-operator require

我有一个包含3个

的index.php文件
<?php
require_once('mod.php');
$mod = new Mod();

require_once('start.php');
require_once('tools.php');

....some code....
?>

我需要能够在start.php和tools.php中引用$ mod对象。 如何传递该对象以被其他2个需要文件引用?

基本上mod.php是一个在__construct()中生成数组列表的类。我想在startup.php和tools.php文件中使用该数组列表数据,但不知道如何传递现有的数据而不分别在这两个文件中调用“new”,因为它重置后不能满足我的需要一切。

谢谢!

4 个答案:

答案 0 :(得分:3)

看起来你正在使用require()调用而不是动态功能加载(获取类定义),而是像函数调用一样。别。避免像瘟疫那样的全局变量。

旁注:不要担心以正确的顺序执行require()调用以定义类,我建议您在PHP 5中查看Autoload功能。它允许您定义在哪个类中定义哪个文件,并在请求类时按需加载这些文件。

答案 1 :(得分:3)

首先使用一些自动加载器。 require个烦人且不必要。

您不必传递对其他文件的任何引用。 require的工作方式类似于“复制粘贴执行”,因此该文件中将提供$mod

#index.php
$mod = new Mod();
include 'file.php';

#file.php
$mod->doSth(); // works file!

您的问题可能是variable scope。如果你需要在另一个对象中使用$mod(其源(类)在另一个文件中无关紧要的事实)将对$mod的引用作为构造函数参数传递,使用特殊的setter传递它($obj->setMod($mod); $obj->doSth();)或使用更复杂但更好的解决方案,如依赖注入容器(sample implementation)。

答案 2 :(得分:1)

执行require(或require_onceincludeinclude_once),只需包含并评估代码即可。变量作用域从代码导入的点继承。

例如,使用您的代码:

<?php // index.php

require_once('mod.php');
$mod = new Mod();

require_once('start.php');

包括:

<?php // start.php

$mod->arrayList(); // $mod is the object created in index.php

答案 3 :(得分:-1)

mod应该可以在其他文件中使用...如果您需要在函数或类中使用它,请使用global关键字,如:

    function test() {
        global $mod;

        print $mod->list;
    }