プロが教えるわが家の防犯対策術!

PHP5で、クラスを作成しているのですが巨大になるのでファイル分割したいのですが、C++やC#のようなことは可能でしょうか?

■Aファイル

class Test {
プロパティ
  メソッド1 (中身なしの宣言のみ)
  メソッド2 (中身なしの宣言のみ)
...
}

■Bファイル
  メソッド1の具体的な処理
  
■Cファイル
  メソッド2の具体的な処理

  

A 回答 (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 を使うというのも手です。
    • good
    • 0
この回答へのお礼

クラス内にインスタンスを持たせる方法も一つですが、
やはり、PHP5では継承・インターフェースを使うほうがスマートかもしれません。

継承・インターフェースの方向で検討します。

お礼日時:2010/06/29 11:40

たぶんinclude(またはrequire)の仕方を質問しているわけでは無いですよね。


PHPでは、下記構造で作るのがスマートだと考えます。

■Aファイル
class Test {
プロパティ
  メソッド1(ClassBのインスタンスを作成)
  メソッド2(ClassCのインスタンスを作成)
...
}

■Bファイル(ClassB)
  メソッド1の具体的な処理
  
■Cファイル(ClassC)
  メソッド2の具体的な処理
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
非常に興味がありますが、具体的には

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(){
...
}
...
}

ということでしょうか?

お礼日時:2010/06/26 09:06

>おなじメソッドのために2度読んできても


2回呼び出す必要があるってすでにクラスの設計の段階で間違った設計しているよ。
だからこそ「_once」の方を利用する。
    • good
    • 1

#2さんのご指摘ですが、今回のケースに限ってはxxx_onceではない方がよいのでは?


おなじメソッドのために2度読んできても2回目のものがよみこまれなくなってしまい
意図したものと違ってくると思います。

クラスを組んでやるなら、xxx_onceは非常に有効な処理なので、切り分けて考えましょう
    • good
    • 0

この手の処理を書くときにはinclude()が定番ですが


include_once()の方がいいでしょう。
それから処理的にinclude()/include_once()は中断しないのでエラー時に処理を中断させたければ
require()/require_once()を利用した方がいいです。
    • good
    • 0

//hoge.php



<?PHP
class hoge{
function __construct(){
include "fuga.php";
}
}
new hoge;
?>

//fuga.php

<?PHP
print "fuga";
?>

できないことはないですが、やるならクラス単位でincludeしてやる方がいいと思います。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!