0

我有一个大项目,所以我创建了这些类:

  • 形式
  • 会员
  • 消息

现在我有一个包含文件,它调用每个类并启动这些类,如下所示:

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... }
}

有没有更好的方法可以将“表单”类设为全局或其他?因为在每个类文件中,我都会调用一些全局类。

4

1 回答 1

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

什么是 PSR-0?

PHPFIG 建议制作可以轻松包含在每个 php 框架中的标准模块。它列出了要遵循的规则列表,以确保您的代码可以以标准方式自动加载。因此,您将使用与目录架构同步的命名空间。

Composer 是一个强大的工具,它依赖于 PSR-0 来自动加载你的类。更重要的是,它能够创建一个依赖树来加载每个尊重 PSR-0 的组件,例如每个 Symfony2 包都可以独立于 Symfony 本身加载,你只需要加载包所依赖的 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;
   }
 }
于 2013-02-04T14:14:08.930 回答