2011-10-25 99 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(); 
    }   
} 

但後來我有兩張包括而且這並不與工作:當我添加一個require_once(「class.a.php」),以class.b.php這樣我可以解決這個錯誤更新版本的PHP?

+0

你試圖通過$ a的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

你應該不是在類名中有點(.)。

,你可能要考慮使用的autoloader

3

嗯,.不是一個有效的運營商的任何地方除了字符串連接new class.a()應該創建一個語法錯誤。你想

class a { 
    // do something 
} 

$a = new a(); 

至於require_once,那麼,一旦你已經包括或PHP腳本所需的文件,所有的類/函數/變量/常量/等。將繼續堅持之後的所有其他文件,其中包括之後的要求。所以你的問題顯然是語法問題。

此外,你可能要考慮修改如下:

  • var $a;是過時的,它應該是public $a(或保護或私有)。 var仍然有效,因爲它向後兼容PHP 4,但它通常是一個壞主意。
  • 這是__construct_constructor
  • a::method();意味着「呼叫類的靜態方法」。你想要類似
    $this->a = new a(); $this->a->method();
+0

這不是我的項目或代碼,這傢伙正在使用靜態調用和它使用較舊的PHP版本,我不知道他爲什麼分裂A級和B級的原因。 – Bytemain