• ベストアンサー

PHP5で、クラスを作成しているのですが巨大になるのでファイル分割した

PHP5で、クラスを作成しているのですが巨大になるのでファイル分割したいのですが、C++やC#のようなことは可能でしょうか? ■Aファイル class Test { プロパティ   メソッド1 (中身なしの宣言のみ)   メソッド2 (中身なしの宣言のみ) ... } ■Bファイル   メソッド1の具体的な処理    ■Cファイル   メソッド2の具体的な処理   

質問者が選んだベストアンサー

  • ベストアンサー
  • mpx
  • ベストアンサー率71% (149/209)
回答No.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 を使うというのも手です。

ne5
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

  • mpx
  • ベストアンサー率71% (149/209)
回答No.5

たぶんinclude(またはrequire)の仕方を質問しているわけでは無いですよね。 PHPでは、下記構造で作るのがスマートだと考えます。 ■Aファイル class Test { プロパティ   メソッド1(ClassBのインスタンスを作成)   メソッド2(ClassCのインスタンスを作成) ... } ■Bファイル(ClassB)   メソッド1の具体的な処理    ■Cファイル(ClassC)   メソッド2の具体的な処理

ne5
質問者

お礼

回答ありがとうございます。 非常に興味がありますが、具体的には 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(){ ... } ... } ということでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
回答No.4

>おなじメソッドのために2度読んできても 2回呼び出す必要があるってすでにクラスの設計の段階で間違った設計しているよ。 だからこそ「_once」の方を利用する。

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

#2さんのご指摘ですが、今回のケースに限ってはxxx_onceではない方がよいのでは? おなじメソッドのために2度読んできても2回目のものがよみこまれなくなってしまい 意図したものと違ってくると思います。 クラスを組んでやるなら、xxx_onceは非常に有効な処理なので、切り分けて考えましょう

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

この手の処理を書くときにはinclude()が定番ですが include_once()の方がいいでしょう。 それから処理的にinclude()/include_once()は中断しないのでエラー時に処理を中断させたければ require()/require_once()を利用した方がいいです。

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

//hoge.php <?PHP class hoge{ function __construct(){ include "fuga.php"; } } new hoge; ?> //fuga.php <?PHP print "fuga"; ?> できないことはないですが、やるならクラス単位でincludeしてやる方がいいと思います。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PHPにてクラスを配列にすることは可能でしょうか。

    PHPにてクラスを配列にすることは可能でしょうか。 環境はPHP5です。 現在下記のようなクラスを作成しました。 class Ary_c { var $v1; // コンストラクタ function Ary_c() { $this->v1 = "test"; } } このクラスをC++言語などで出来るような、 クラスの配列として扱いたいのです。 C++だとたとえば10個の要素があるクラスの配列は Ary_c t[ 10 ]; みたいな感じで宣言できます。 こういったことをPHPでやることは可能でしょうか。

    • ベストアンサー
    • PHP
  • 超初心者です。クラスファイルの作成について、

    超初心者ですが宜しくお願いします。 phpの学習をはじめて、演算、比較、繰り返し、などを初級本の通り進めてきたのですが、classの作成で悩んでいます。 拡張子を.phpではなく.classで保存と書いてあるのですがテキスト通り試みても画面に出力されません。(errorも出ちゃいます。)テキストではそのままクラスファイルを実行すると画面に出力されると書いてあるのですが.classの保存ではいけないのでしょうか?・・ javaのmainクラス作成の様に処理されると考えていたのですが・・・ それと環境ですが、php5でエディタは、DreamWになります。 初歩的な質問ですがどうぞ宜しくお願いします。

    • 締切済み
    • PHP
  • ファイルからの入力 Scannerクラス

    ファイルの内容を読み込むプログラムをJavaで作成しています。 Scannerクラスを利用するため、以下のようにimport宣言しました。 package bc; import java.util.Scanner; class FileScanner {  コンストラクタ{   }  メソッド{   }    :    :  mainメソッド{   } } という感じで書いているのですが、この場合のメソッド名は、 Scannerクラスで定義されている名前でないとダメなのでしょうか? 自分で作った名前でメソッドを定義したのですが、 Scannerクラスで定義されていません。 というようなエラーが返ってきてうまくいきません。 どなたか、ご教授くださいm(_ _)m

    • ベストアンサー
    • Java
  • PHPでPHPファイルを作成することはできますか?

    タイトルの通りの質問です。 http://example.jp/test.phpを実行すると、 tempというディレクトリが作成され、さらにその中に file.phpが作成するなんてことできませんか? file.phpの中身は ---ここから <?php echo "<html><body>hello world!</body></html>"; ?> ---ここまで …とし、当然ながら http://example.jp/temp/file.php にアクセスすると「hello world!」と表示されるようにしたいのですが。

    • ベストアンサー
    • PHP
  • 【ASP.NET】 独自で作成したクラスが認識されない

    お世話になります。ASP.NETに関する質問です。 Visual Studio 2008の開発環境において、 画面右側のソリューションエクスプローラより 右クリックして[新しい項目の追加]をクリックして 新規にクラスファイル(Class1.vb)の作成(言語: Visual Basic)を 行いました。 別のソースファイルより、上記で作成したクラスをインスタンス化 しようとしたところ、コンパイル時に下記エラーが出力されます。 ------------------------------------------------------ 型 'Class1' が定義されていません。 ------------------------------------------------------ クラスをインスタンス化しているソースの記述は以下の通りです。 (test.vb)--------------------------------------------- '変数宣言 Dim cl1 as Class1 = Session.Contents("クラス1") ------------------------------------------------------ Class1.vbの内容は以下の通りです。 (Class1.vb)------------------------------------------- Public Class Class1 Protected _LoginTime As String Public Property LoginTime() As String Get Return _LoginTime End Get Set(ByVal Value As String) _LoginTime = Value End Set End Property End Class ------------------------------------------------------ どなたか原因と対処方法についてご教授願えますでしょうか? 以上、よろしくお願いいたします。

  • PHP5でクラスを作成しています。

    PHP5でクラスを作成しています。 コンストラクタの段階で論理エラーにしたくて、インスタンス値をnullにしたいです。 つまり直ちにプログラムを止めずに、クラスの生成(インスタンス化)を失敗させる 方法を__construct()関数内でどのように書けば良いのでしょうか? class Sample { function __construct() { // この中で処理の異常が発生! // インスタンス作成を失敗させる or インスタンス値をヌルにする。 //? //?どのように書けば?? //? } } $a = new Sample(); if ($a === null) { printf("正しくインスタンスの生成ができませんでした。"); } よろしくお願いします。

    • 締切済み
    • PHP
  • PHPファイルのクラス化と呼出について

    PHP初心者です。 今PHPファイルをClass化することを勉強しています。 A.phpをClass化することは出来るのですが、B.phpからA.phpのFunction Test()を呼び出し、パラメータを与えてるにはどのような記述をすれば良いのでしょうか? ヒントやアドバイス、ご教授頂ければ嬉しいです。

    • ベストアンサー
    • PHP
  • PHPコードのクラス化と呼び出し方

    以前にも同じ質問をしましたが、回答を締め切ったため再度質問します。 現在、タイトルの通り「クラス化と呼び出し方」について奮闘しています。 内容としては、[index.php]から[Message.php]へパラム値を渡し、値によってメッセージ文字列を表示するという簡単な処理をクラス化したいのですが、どうも期待する動作をしてくれません。 値は返ってきているように見えますが、なぜか「Object」となっています。本当は「test」じゃないといけないのですが・・・ 何が悪いのかご指摘を頂ければ嬉しいです。 以下に現在作成中のコードを載せます。 --------------------------------------------------------------- [index.php] -<?php - include_once("message.php"); - class test extends message { - } - - $index = new test("1"); - print $index; - ?> ------------------------ [Message.php] -<?php - class Message { - public function _construct($ErrorID) { - $this -> ErrorID = $ErrorID; - } - - function ErrorMessage() { - switch($ErrorID) { - case 1: - $str = "test"; - return $str; - default: - print("Error:予期せ-ぬエラーです。管理者へ連絡して下さい。"); - exit; - } - } - } -?> ---------------------------------------------------------------

    • ベストアンサー
    • PHP
  • VisualStudio2005 C++ クラスの追加について

    C/C++カテゴリですが質問内容はVisualStudio(C++)です。 当該しそうなカテゴリがなかったのでこちらに質問させて頂きます^^ [プロジェクト]-[クラスの追加]からクラスを作成する際、クラス名などをウィザード上で入力したら、.cpp/.h ができますよね。 内容としては、コンストラクタとデストラクタが書かれています。 これに決まったファイルコメントを同時に出力したいと考えています。 下に出力イメージを記します。 test.hの中身 ----------------------------------------------------------------- /*************************************************** * testクラスの宣言 * @author : * @see : ***************************************************/ /*↑を一緒に出力したい*/ /*↓は今まで通りの出力*/ #pragma once class test { public: test(); ~test(); }; ----------------------------------------------------------------- こんなことできますでしょうか? ・クラス作成ウィザードの実態はこいつでここをこう拡張すればできる ・クラスのテンプレートなるものがいて、そこに書いてやればいい のような回答で結構です。 ご存知の方はご教授ください:-)

  • 2つのクラスファイルの使用方法

    こんにちわ。PHP4.3 PHP5でのクラスについての質問です。 A.cls SQL関連のクラス(検索や登録に使用) B.cls LOG関連のクラス(SQLエラーやページ遷移時に使用) C.php 処理のページ と3つのファイルを作りました。 C.phpでA.clsとb.clsをrequireしてnewで各オブジェクト(A_obj B_obj)を作成します。 A.cls内でDB接続が失敗したり、SQLエラーがあった時に B.clsのメソッドを使用してログを書き出そうとしています。 今はA.cls内の各メソッドでB_objをglobeで呼び出すか引数で渡すかしています。 ここから質問なのですが、 c.phpで作成したB.clsのオブジェクトをA.cls内で使用しようと思えば A.clsの各メソッドでglobeするか引数で渡すかしか方法がないのでしょうか? 各clsファイルの機能がぜんぜん違うので継承は考えていません。 あいまいな質問で申し訳ないのですが、globe、引数以外で方法がありましたら、ご教授お願いします。 PHPのバージョンは4のみOKや5のみOKなどでもかまいません。 よろしくお願いします。

    • ベストアンサー
    • PHP