• 締切済み

require_onceについて

いつもお世話になっております。 超初級な質問で申し訳ないのですが困ってます。 下記のような4つのclassがあります。 A_Class------------ <?php require_once('Base_Class'); class A_Class extends Base_Class{} Base_Class------------------ <?php require_once('B_Class'); abstract class Base_Class { public function hoge (){ $b = new B_Class(); $b->hoge(); } } B_Class--------------------- <?php require_once('C_Class'); class B_Class{ public function hoge (){ $c = new C_Class(); } } C_Class--------------------- <?php require_once('Base_Class'); class C_Class extends Base_Class{} ほかのファイルからrequire_once('A_Class');をすると PHP Fatal error: Class 'Base_Class' not found in C_Class.class.php on line 2 となります。 Base_Classのrequire_once('B_Class');をクラス定義の下に書けば通るのですが、 できればrequire_onceは上部にそろえておきたいです。 require_onceを下に書かずに修正する方法がありましたらご教授お願いします。

みんなの回答

  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.2

コピペでやっただけですが、エラーは再現されず普通に動くようです。(PHP5.2) 意図しない同名別ファイルが読み込みされているかと思いましたが、絶対パスとのことですし…。 詳しい方の回答を待ってみて下さい。お役に立てずご容赦

  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.1

各ファイルでのincldue時、相対パスで書いていませんか? 「実行ファイルがパスの基準」になりますよ。 たとえば全部同じディレクトリにあって、それぞれは include_once("各ファイル");で動いていても、それを /別ディレクトリ/テスト.php から実行すると A_Classでは /別ディレクトリ/Base_Class を探します。 http://www.profaim.jp/lang-env/php/resolve_path.php

t-iimura
質問者

お礼

ご返答ありがとうございます。 incldue時のパスは絶対パスで書いてます。 自分の説明不足ですいません。 A_ClassからBase_Classをrequire_onceしたとき Base_Class内にB_Classのrequire_onceをクラス定義の上部に書いてあるため Base_Classのクラス定義を読み込まず B_ClassからC_Classを呼び C_Class内ではrequire_onceの為Base_Classは呼ばれず PHP Fatal error: Class 'Base_Class' not found in C_Class.class.php on line 2 となります。 require_onceを下に書けばいいのですが、 できれば上部に集約したく悩んでいます。

関連するQ&A