2013-07-04 181 views
0

我正在學習面向對象的PHP,我認爲我在做一些愚蠢的事情。從另一個抽象類的PHP抽象類屬性

我有一個抽象的userManager類,我想給它分配一個$ db屬性,它將成爲我的抽象數據庫類的實例。

數據庫類是:

abstract class Bdd{   
     private static $instance = null; 

     public static function getInstance() { 
      return self::$instance; 
     } 

而且的UserManager類:public $db = Bdd::getInstance();

(解析錯誤:

abstract class usersManager{ 
     public $db = Bdd::getInstance(); 

我在這一行有一個錯誤語法錯誤,意外'(',expect','或';')

這是錯嗎?

我覺得我誤解了抽象類,在我的情況下是單身更好嗎?

回答

2

你不能打電話的時候,你聲明一個類變量的方法,你需要做

public $db = null 
public function __construct() { 
    $this->db = Bdd::getInstance(); 
} 

這個唯一的小問題,就是當你擴展這個類,你需要創建一個構造函數,你需要通過執行parent::__construct();

+0

這似乎是合法的,但我的課是抽象的和__construct方法不叫... – FLX

+0

無關緊要,它是抽象的__construct函數將被調用,除非像我的回答說,在你的子類中,你已經聲明__construct方法,在這種情況下,您將需要調用parent :: ___ construct() – Kris

+0

我檢查了文檔和您的權限,但即使我做了公共函數__construct(){'0}。 \t \t}構造函數沒有被調用,我不明白爲什麼。這個類的另一個方法被稱爲。 – FLX

0
public $db = Bdd::getInstance(); 

錯誤調用此構造函數,以及發生是由於上面的行。聲明變量時不能調用方法。

0

類參數必須能夠在編譯時而不是運行時進行評估。基本上你只能預定義簡單的值,比如字符串,null,int的e.c.t.

因爲Bdd:getInstance()的結果只有在運行(即運行時間)之前才能知道,所以不能用作預定義值。

您應該改爲將參數設置爲null,然後在您的類構造方法中設置數據庫實例。