我有一个包含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”,因为它重置后不能满足我的需要一切。
谢谢!
答案 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_once
,include
或include_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; }