2012-02-24 3 views
3

私はクラス '検索'を持っています。 'search'が必要かどうかの決定は、 'setupPage'関数の 'page'クラスで行われます。それは大丈夫です(良いコーディングですか)、別のクラス内にクラスを含める?PHPの別のクラスにクラスを含める

class Page { 
    private function setupPage($page_id){ 
     switch($page_id){ 
      case 1: 
      // do something 
      break; 

      case 2: 
      include_once('class_search.php'); 
      // class search is singleton 
      $this->search = Search::getInstance(); 
      // now I can use functions of 'search' 
      $this->search->someSearchFunction(); 
     } 
    } 
} 

答えて

2

これは絶対にうまくいきますが、他の選択肢もあります。あなたは新しいクラスをインスタンス化するたびに、PHPのオートローディング関数を見たいかもしれません。

function __autoload($class_name) { 
    include $class_name . '.php'; 
} 

PHPは自動的に__autoload関数を1つの引数、すなわちクラス名で呼び出す。ここでユーザーオブジェクトをインスタンス化するときのautoload関数が呼び出され、それは同じディレクトリからファイルをインクルードしようとする例以下

$user = new User():

を検討してください。 (上記オートロード機能を参照)。クラスを自動ロードするための独自のロジックを実装することができます。それが存在するディレクトリに関係なく。詳細については、http://in.php.net/autoloadを参照してください。

2

私はこれをしません。あなたのクラスだけがロードされるようにするには、必要であればPHPのオートローディングを使用することをお勧めします。 Here is the Documentation.

+1

クラスを手動で読み込むことに何も問題はありませんが、私はオートローディングが方法になることに同意します。基本的には同じことですが、インクルードが暗示されているため、よりよく見えます。また、関数を変更すると、パスの変更が発生した場合に 'include()'のすべてのインスタンスを変更するよりも簡単になります。 – Crashspeeder

0

autoloadingを使用すると、これは問題ではありません。

関連する問題