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

'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');});

規範を尊重し、オートローダーとして使用することは、非常に優れた方法です。使用を許可するには、少なくとも PHP 5.3 があることを確認してくださいPSR-0composerPSR-0

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に最新バージョンが取得され、プロジェクトに組み込まれます。

依存関係とサイクルについて:

グローバルを使用しないでください。維持するのは苦痛です。絶望的な場合にのみ使用する必要があります。あなたの場合、代入を 2 つに分割することで、構造のサイクルを断ち切ることができます。

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 に答える