2012-04-02 41 views
0

我一直處於衝突問題的種類。有一個數據庫類包含連接,更新,刪除,插入,獲取方法,還有擴展數據庫類的用戶類。數據庫類與其他類的衝突

class User extends Database {...} 

問題是,當我初始化同時數據庫級和用戶級的「的index.php」,我得到一個致命錯誤,它說「致命錯誤:不能重新聲明類數據庫」。

include "database.class.php"; 
include "user.class.php; 
$db = new Database; 
$db->connect(); 

所以,我知道初始化數據庫類兩次,但如何防止不發生? P.S .:我可以在其他新類中使用Database類。

+4

'require_once(「database.class.php」);''而不是'include',無論你在哪裏包括它。 – 2012-04-02 19:40:16

+0

可能重複的[PHP:無法重新聲明類](http://stackoverflow.com/questions/3769909/php-cannot-redeclare-class) – 2012-04-02 19:41:02

+1

只是爲了讓它正確:用戶是數據庫?! Oo – KingCrunch 2012-04-02 19:45:34

回答

1

在OOP中,extends表示「是a」。你在那裏寫的是:「用戶是一個數據庫」。哪些是可靠的瘋狂的。

而是擴展數據庫類的,你應該將其注入User實例的構造函數:

$database = new Database(...); 
$database->connect(); 
$user = new User($database); 

始終favor composition over inheritance

至於require_once爛攤子..剛學會如何使用spl_autoload_register()

+0

你能舉一個例子我怎麼用?應該如何構造用戶類的構造函數?這個用法對我來說有點奇怪。 – 2012-04-02 20:34:42

+0

@GncArt,任何類的構造函數都應該只給局部變量賦值。在寫得很好的面向對象的代碼中,構造函數不會做任何「工作」。 – 2012-04-02 20:40:02

+0

@GncArt,如果你真的想了解更多關於面向對象的知識,你應該看幾門主題的講座。如果您滾動到「此類評論」(http://stackoverflow.com/questions/9846220/php-oop-core-framework/9855170#9855170)的「OOP beyond classes」部分,則會有一個視頻列表學科。看他們。你會從他們身上學到很多東西。我確實如此。 – 2012-04-03 06:26:58

1

改變兩個「包括」你有「require_once」,邁克爾說:

require_once "database.class.php"; 
require_once "user.class.php"; 
$db = new Database; 
$db->connect(); 

此外,如果在文件中「user.class.php」要包括的文件「database.class .php「,將其更改爲」require_once「。

我希望它有幫助!