• ベストアンサー

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などでもかまいません。 よろしくお願いします。

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

  • ベストアンサー
  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

A_objの中にB_objを設定するとか。 class A {  var $_logHandler = null;  function setLogHandler($handler) {   $this->_logHandler = $handler;  }  function query() {   ;//query.   $this->_handler->putLog();  } }

amountainblast
質問者

お礼

回答ありがとうございます。 実現できました。 こんな方法もあったんですね。 助かりました。 これだと今後クラスファイルが増えても対応できそうですね。 どうも、ありがとうございました。

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

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

php4でしたらコンストラクタで、a,bを別のオブジェクトとして読み込んじゃったらどうですか? //a.cls <? class a_class{ function print_hoge(){ print "hoge"; } } ?> //b.cls <? class b_class{ function print_fuga(){ print "fuga"; } } ?> //c.php <?php require_once "a.cls"; require_once "b.cls"; class c{ function c(){ $this->a=new a_class; $this->b=new b_class; $this->a->print_hoge(); $this->b->print_fuga(); } } new c; ?>

amountainblast
質問者

お礼

回答ありがとうございます。 こんな方法もあったんですね。参考になりました。 でもやりたいのはクラスAの中でクラスBのメソッドを使用したいので、 この方法だとちょっと違うようです。 ありがとうございました。

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

関連するQ&A

  • 指定されたクラスの継承元の確認方法

    Class cls = Class.forName("extendsClass"); Object obj = cls.newInstance(); if (obj instanceof AbstractClass) {   System.out.println("継承してた");   ((AbstractClass)obj).method(); } こんなことをして、objのクラスがAbstractClassを継承しているという ことは確認することが出来たのですが、これはやはり継承しているか どうかを確認する為にインスタンス化を行っています。 指定された名称のクラスが、特定のクラスを継承していた場合に限り、 その名称のクラスをインスタンス化する、 という流れは行えないのでしょうか?

    • ベストアンサー
    • Java
  • あるクラスであるかどうかを確認する方法は?

    あるクラスが特定のクラスである事を確認する方法が知りたいです。 例えば下記のようにCクラスがBクラスを継承し、BクラスがAクラスを継承していた場合。 あるメソッドでAクラスの引数を受け取ったが、これがAクラスであるかどうかを判別したいです。(BではなくかつCではない) instanceofを使用し、Cでfalse、Bでfalseと判別する方法以外でありましたらお願いします。 Aクラス ..| ..+--Bクラス ......| ......+--Cクラス

    • ベストアンサー
    • Java
  • クラスの中のクラスへのアクセス

    お世話になります。 クラスが以下のようにあります。 class ClassName1{ var $classname2_obj; // クラス「ClassName2」のオブジェクト function getClassName2Obj(){ return $this->$classname2_obj; } } class ClassName2{ var $array_list; // 配列です  function getArrayList(){ return $this->array_list; } } やりたいのは、ClassName1のgetClassName2Obj関数でClassName2の配列をgetArrayListで取得したいのです。 $a = new ClassName1; $b = $a->getClassName2Obj(); $c = $b->etArrayList(); 上の$b = … と$c = …の部分の処理を一行にまとめることはできないでしょうか? 何卒よろしくお願い致します。 PHPは5です。

    • ベストアンサー
    • PHP
  • オブジェクト指向で分からないことが。

    オブジェクト指向で分からないことが。 1.クラスAから、文字列引数を指定して、クラスBがインスタンス化されたオブジェクトを取得する。 (getInstance的メソッド)引数の文字列にマッピングされたオブジェクトを取得する感じ。 2.1.で取得したオブジェクトから、各オブジェクトを取得するメソッドを呼び出し、オブジェクトを取得する。(仮にクラスC) 3.2.で取得したクラスCのメソッドを呼び出す。 このとき、クラスCのメソッド内で、1.で利用された引数を利用したいです。 そもそもクラスCは、1.を経てしか取得されないものの為、再度1.の引数を渡したくありません。 内部的な値なので、スコープpublicのセッターを用意して、クラスA内からの書き換えが出来ては困ります。 こういう場合、どういうクラス設計を行えば良いのでしょうか?

    • ベストアンサー
    • Java
  • VBのクラスの利用

    VBの初心者ですが、FormにTextBoxとコマンドボタンを配置して、ボタンクリックでTextBoxに"ABC"と表示させるものをクラスを使ってやろうと思っています。WriteAクラスを作り、その中にkakikomiメソッドを作り、引数を(TextA AS TextBox)とし、メソッド内部でTextA.Text="ABC"としました。 コマンドボタンクリックメソッド内部で、  Dim obj As WriteA  Set obj=New WriteA  obj.kakikomi(Text1)//Text1はTextBoxのオブジェクト名 とすると、[引数の型が違う]でコンパイル出来ません。どうしたら良いのでしょうか?

  • [log4j]ログ出力クラスでのメソッド名出力方法

    お世話になっております。 現在log4jを使用したログの出力を検討しております。 その中で1点質問させてください。 Javaの初心者のため、質問がわかりにくいかもしれません。 申し訳ございません。 【質問】 クラスAのinit処理の中でログ出力用クラスBをインスタンス化し、 クラスAのメソッドCの中で、ログ出力用クラスBのログ出力メソッドDを実行することでログ出力させる方法を考えております。 ここでメソッドDで出力させるログの中にメソッドCの名前を出力させたいのですが、 方法がわかりません。 わかる方、教えていただけないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • 使えるメソッドはクラスで予め指定されている?

    javaを始めたばかりでまだ右も左も分からないのですが、 (オブジェクトは作成してみましたが、クラス自体は作ったことがありません。) 例えば、Aというオブジェクトを作る為に、Bというクラスを使ったとします。 この際、使用できるメソッドというのは、クラスで予め定義されているものが使えるのでしょうか? それとも、クラスとオブジェクトというのは、全く切り離されたもので、 メソッドはjavaの世界で予め用意され、どんなオブジェクトを作成する時にも全て使用出来るものなのでしょうか? 教えてください!!

    • ベストアンサー
    • Java
  • クラスを使用した問題

    問題 Mainクラス 1.実行時に引数を付けて実行する。 2.判定クラスのオブジェクトを生成する。 3.args(実行時の引数)から値を取得する。 4.argsから取得した値を引数として、判定クラスのnameメソッドを実行する。 5.argsから取得した値を引数として、判定クラスのageメソッドを実行する。 6.argsから取得した値を引数として、判定クラスのbirthメソッドを実行する。 判定クラス nameメソッド(引数=String) 1.String型の引数を一つ受け取る 2.受け取った引数の値が「name」だった場合、名前を表示する。 戻り値なし。 ageメソッド(引数=String) 1.String型の引数を一つ受け取る 2.受け取った引数の値が「age」だった場合、名前を表示する。 戻り値なし。 birthdayメソッド(引数=String) 1.String型の引数を一つ受け取る 2.受け取った引数の値が「birthday」だった場合、名前を表示する。 戻り値なし。 実行結果 java NameAgeBirth name 岩田 java NameAgeBirth age 27歳 java NameAgeBirth birthday 5月16日 参考例が欲しいです。良かったら参考例をください。よろしくお願いします。

  • 外部jarの標準出力を取得できますか?

    ClassLoaderで外部jarのクラスをロードし、実行するプログラムを作りました。 SimpleOutputは、単に渡された引数を標準出力に出すだけのものです。 この値を取得してGUI上に表示させたいのですが、取得する方法をご教授ください。 System.out.println("Load class"); URL[] urls = { file.toURI().toURL() }; ClassLoader loader = URLClassLoader.newInstance(urls); Class<?> cls = loader.loadClass("SimpleOutput"); System.out.println(cls); Object obj = cls.newInstance(); Method method = cls.getMethod("main", String[].class); String[] av = {"test"}; method.invoke(obj, new Object[]{av});

    • ベストアンサー
    • Java
  • 実行時に確定するメソッドを呼び出す方法について

    invoke()メソッドや、Methodクラスを 使用するなど。以前に小耳にはさんだ。記憶があります。 以下の3つの引数から 動的に該当メソッドを呼び出す。 処理を実装コードがすぐだせる方がいると 助かります。 Object foo(Object obj, String methodName, Collection param) (1)該当オブジェクト getClass()などで、該当クラスを動的に  特定。 (2)、(1)が保有しているメソッドのうち、 発行したいメソッドの名前 (3) parmには1要素ごとに2要素のObject[]型を   を格納して、 Object[0]の要素にかんしてはが引数の型についての完全修飾クラス名をあらわすString型。   Object[1]については実際に入っている値。 上記3つの引数をうけとって内部で getClass()とかつかって 必要な情報はすべて実行時に動的に 取得して objの該当オブジェクトを 発行し、foo()メソッド自体の 返却値はそのメソッドの返却値とする という ロジックの実装のサンプルがあると。 とても、うれしいです。 じゃ、void型が返却の時どうすんねん。 とか、staticの時どうすんねん。 とか、その変のアイデア持ってる 人がいるととてもうれしい。 以上

    • ベストアンサー
    • Java