2011-10-25 28 views
0

通常、私はオブジェクトを作成する前にクラスファイルをインクルードします。私の質問は、どのように私のメインファイルにのみクラスファイルを含めることができますし、別のクラスでそれを使用する方法ですか?ここに私のコードです:PHPはクラスファイルを見つけることができません

メインファイル:

require_once("class.a.php"); 
require_once("class.b.php"); 

var $a; 

function main() { 
    $a = new class.a(); 
    $b = new class.b(); 
} 

クラスB:

class b { 
    var $a; 

    function __construct() { 
      $this->a = class.a::method(); 
    }   
} 

これは、一部の古いPHPのバージョンで動作しているようですが、それはエラーファイルを与えるがないclass.a.phpいくつかの新しいPHPバージョンにあります。

編集:私は私の質問を修正しました:class.bはclass.aのメソッドへの直接呼び出しを使用します。これにより、class.a.phpが見つかりませんでした。

require_once("class.a.php"); 
class b { 
    var $a; 

    function _constructor() { 
      $this->a = class.a::method(); 
    }   
} 

をしかし、私は、2つの含まれているとも、これは動作しません:私はのrequire_once(「class.a.php」)は、このようclass.b.phpするを追加するとき、私はこのエラーを修正することができますPHPのバージョンを更新しますか?

+0

あなたはclass.bする$渡そうとしていますか? – onatm

+0

これは私のプロジェクトではなく、ただ修正しようとしていて、このテンプレートを見つけました。このエラーファイルが見つかりません。問題は、このコンストラクタを使用して、クラスaのメソッドを呼び出すことです。 – Bytemain

+0

可能性のある複製の依存関係オートローディングの方法(http://stackoverflow.com/questions/7362957/how-to-manage-dependency-autoloading) – Gordon

答えて

1

他の回答に記載されているようにクラス名を変更してください。それらを "a"と "b"にします。あなたはクラスbに依存性注入を使わなければなりません。

b { 
    public $a; 

    function __construct(a $a) { 
     $this->a = $a; // now you have the instance of class.a in your class.b 
    }   
} 

そして、あなたのmain.php

require_once("class.a.php"); 
require_once("class.a.php"); 

function main() { 
    $a = new a() 
    $b = new b($a); 
    $b->a->method(); // call the method of a 
} 
2

NOTには、クラス名にドット(.)が付いています。

そして、あなたは.はどこにでも離れて、文字列の連結からの有効な演算子ではありませんようnew class.a()が構文エラーを作成する必要があり、まあautoloader

3

を使用して検討する必要があります。あなたは付属またはPHPスクリプト内のファイル、クラス/関数/変数/定数/などのすべてを必要としたらあなたは、よく、require_onceに関しては

class a { 
    // do something 
} 

$a = new a(); 

をしたいです。の後には、が含まれている他のすべてのファイルで引き続き維持されます。だからあなたの問題は明らかに構文の問題です。

また、次の変更を検討することもできます。

  • var $a;が古くなって、それがpublic $a(または保護またはプライベート)でなければなりません。 varは、PHP 4と下位互換性があるため、依然として有効ですが、一般的には悪い考えです。
  • _constructor
  • は、「クラスaの静的メソッドを呼び出す」を意味します。あなたは何かが欲しい
    $this->a = new a(); $this->a->method();
+0

これは私のプロジェクトやコードではなく、男は静的呼び出しを使用しています古いPHPバージョンで働いていたので、彼がクラスaとbを分割する理由はわかりません。 – Bytemain

関連する問題