- ベストアンサー
PHP5で、クラスを作成しているのですが巨大になるのでファイル分割した
PHP5で、クラスを作成しているのですが巨大になるのでファイル分割したいのですが、C++やC#のようなことは可能でしょうか? ■Aファイル class Test { プロパティ メソッド1 (中身なしの宣言のみ) メソッド2 (中身なしの宣言のみ) ... } ■Bファイル メソッド1の具体的な処理 ■Cファイル メソッド2の具体的な処理
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
>> <前略> >> ということでしょうか? 基本的にはそうです。 以下のように 親クラスのコンストラクター内で 他クラスのインスタンスを作っておけば後は関数を使えます。 -- fileA.php -- <?php require_once('fileB.php'); require_once('fileC.php'); class Test{ var $clsB; var $clsC; //Constructor function Test(){ $this->clsB =NEW BM(); $this->clsC =NEW CM(); } function funcB($t){ return $this->clsB->testBM($t); } function funcC($t){ return $this->clsC->testCM($t); } } -- fileB.php -- <?php class BM{ function testBM($t) {return 'classBで['.$t.']処理';} } ?> -- fileC.php-- <?php class CM{ function testCM($t) {return 'classCで['.$t.']処理';} } ?> -- 実行ファイル -- <?php require_once('fileA.php'); $test=NEW Test; $t="データ"; echo $test->funcB($t); echo "<br>\n"; echo $test->funcC($t); echo "<br>\n"; // ラッパー関数を使わない場合 echo $test->clsC->testCM($t); ?> 他に、クラスの継承 extends を使うというのも手です。
その他の回答 (5)
- mpx
- ベストアンサー率71% (149/209)
たぶんinclude(またはrequire)の仕方を質問しているわけでは無いですよね。 PHPでは、下記構造で作るのがスマートだと考えます。 ■Aファイル class Test { プロパティ メソッド1(ClassBのインスタンスを作成) メソッド2(ClassCのインスタンスを作成) ... } ■Bファイル(ClassB) メソッド1の具体的な処理 ■Cファイル(ClassC) メソッド2の具体的な処理
お礼
回答ありがとうございます。 非常に興味がありますが、具体的には class Test { var $a = 1; var $b, $c; function bm() { $this->b = new BM(); } function cm($x){ $this->c = new CM($x); } }; ■Bファイル class BM { function BM(){ $this->__construct(); } function __construct(){ ... } ... } ということでしょうか?
- mudamuda546
- ベストアンサー率27% (37/136)
>おなじメソッドのために2度読んできても 2回呼び出す必要があるってすでにクラスの設計の段階で間違った設計しているよ。 だからこそ「_once」の方を利用する。
- yambejp
- ベストアンサー率51% (3827/7415)
#2さんのご指摘ですが、今回のケースに限ってはxxx_onceではない方がよいのでは? おなじメソッドのために2度読んできても2回目のものがよみこまれなくなってしまい 意図したものと違ってくると思います。 クラスを組んでやるなら、xxx_onceは非常に有効な処理なので、切り分けて考えましょう
- mudamuda546
- ベストアンサー率27% (37/136)
この手の処理を書くときにはinclude()が定番ですが include_once()の方がいいでしょう。 それから処理的にinclude()/include_once()は中断しないのでエラー時に処理を中断させたければ require()/require_once()を利用した方がいいです。
- yambejp
- ベストアンサー率51% (3827/7415)
//hoge.php <?PHP class hoge{ function __construct(){ include "fuga.php"; } } new hoge; ?> //fuga.php <?PHP print "fuga"; ?> できないことはないですが、やるならクラス単位でincludeしてやる方がいいと思います。
お礼
クラス内にインスタンスを持たせる方法も一つですが、 やはり、PHP5では継承・インターフェースを使うほうがスマートかもしれません。 継承・インターフェースの方向で検討します。