我有一个很大的项目,所以我创建了这些类:
现在我有一个include文件,它调用每个类并启动这个类,如下所示:
require_once('forms.php');
require_once('members.php');
require_once('messages.php');
$forms = new forms();
$members = new members();
$messages = new messages();
在每个班级中都有另一个类需要像成员类一样的例子:
class members() {
function __construct()
{
global $forms;
$this->forms = $forms;
}
{ function list that use $this->forms... }
}
有没有更好的方法让'form'类成为全局或类似的东西?因为在每个类文件中,我都会调用一些全局类。
答案 0 :(得分:3)
一步一步:
require_once('forms.php');
require_once('members.php');
require_once('messages.php');
应由提供给spl_autoload_register
的自动加载脚本处理:
spl_autoload_register(function($class){ require($class.'.php');});
非常良好做法可以是尊重PSR-0
规范并使用composer
作为自动加载器。
允许使用PSR-0
,请确保您至少拥有PHP 5.3
PHPFIG建议制作可以轻松包含在每个php框架中的标准模块。它列出了要遵循的规则列表,以确保您的代码可以以标准方式自动加载。因此,您将使用与目录体系结构同步的名称空间。
Composer是一个功能强大的工具,依靠PSR-0自动加载你的课程。更有甚者,它能够创建一个依赖树来加载每个尊重PSR-0的组件,例如每个Symfony2包都可以独立于Symfony本身加载,你只需加载bundle所依赖的Symfony组件(例如HTTPFundation)或YamlComponent)。
如果您的项目依赖于Symfony Yaml组件,则在名为composer.json
的配置文件中,您将添加require
部分
'Symfony\Component\Yaml': *;
每次使用php composer.phar update
时,它都会获得最新版本并将其包含在您的项目中。
永远不要使用全球!维持是一种痛苦。它必须仅用于绝望情况。 对于你的,你可以通过分配两个分配来打破构造周期:
class members() {
function __construct($forms)
{
$this->forms = $forms;
$form->setMembers($this);// here is the trick
}
}
class forms(){
public function __construct($members = null){
$this->members = $members;
}
public function setMembers(Members $m){
$this->members = $members;
}
}