2016-07-15 13 views
0

私は、次のようなものがあります。PHPで同時に2つのクラスファイルをインクルードする方法。

include 'firstclass.php'; 
include 'secondclass.php'; 

firstclass.php

class First { 
    public static function foo() { 
    Second::bar(); 
    } 
    public static function oof() { 
    // ... 
    } 
} 

secondclass.php

class Second { 
    public static function bar() { 
    First::oof(); 
    } 
} 

見ることができるように、私はからSecondクラスのメソッドにアクセスする必要がありますFirst、およびその逆。

どうすれば互いのクラスからアクセスできるようにすることができますか?

が同じファイル

最も簡単な最速の修正プログラムは、同じファイルで両方のクラスを置くことであるに入れ:

+1

クラスの自動読み込みを参照してください。http://php.net/manual/en/language.oop5.autoload.php – Jaime

+0

@Jaimeああ、助けてくれました。おそらくもっと情報を答えに入れたいと思うでしょうか? – think123

答えて

4

2つのオプションがあります。 PHPはファイルを実行する前に解析するので、クラスは互いのメソッドを使用できます。これは機能しますが、よりプロフェッショナルでスケーラブルなソリューションが他の選択肢です。

使用自動ロード

PHPは、あなたがそれをあなたが未知のクラスを呼び出すときに見える場所に関する指示を与えることができます。これをオートロード(intro)といいます。

すべてのスクリプトの前に実行される初期化スクリプトがあります。これは、auto_prepend_file=/path/to/init.phpphp.inidetails)に設定すると最も簡単に実行できます。セットアップ、このようなスクリプトをしたら、あなたは

//function called whenever you use an unknown class. It will 
//be passed the name of your class 
function my_autoloader($class) { 
    include __DIR__ .'/classes/' . $class . '.class.php'; 
} 

spl_autoload_register('my_autoloader'); 

にそれに上記のコードを自動ロード命令を追加することができ、あなたのクラスはinit.phpclassesサブディレクトリにある場合は動作、および拡張.class.phpを使用します。あなたの例で動作させるためには、ディレクトリ構造は

init.php 
classes/ 
    First.class.php 
    Second.class.php 

にする必要があります。オートローダを適切に調整してください。

+0

それは 'File/Directory'の1つで、' require_once'を2回も呼び出さないでしょうか? – RoCk

+0

@RoCk 'require_once'は決して呼び出されません。オートローディングは異なります。 PHPは、ファイル全体を解析してから実行します。それがわからないクラスに遭遇すると、それを見つけてメモリにロードするために 'my_autoloader'を使います。既にロードされているクラスを呼び出すと、再ロードされません( 'my_autoloader'は既知のクラスに対して呼び出されません)。 – BeetleJuice

関連する問題