订购课程的最佳方式是什么?

时间:2013-02-04 13:57:02

标签: php class

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

  • 形式
  • 成员
  • 消息

现在我有一个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'类成为全局或类似的东西?因为在每个类文件中,我都会调用一些全局类。

1 个答案:

答案 0 :(得分:3)

一步一步:

loading:

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本身加载,你只需加载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;
   }
 }