2010-03-29 94 views
2

我爲自己構建了一個MySQL類,我在我的所有項目中都使用它。我即將開始一個基於用戶帳戶的項目,並計劃爲此創建自己的課程。關鍵是,用戶類中的很多方法都是MySQL類中的MySQL查詢和方法。在課堂上使用班級?

例如,我有我的用戶類的方法來更新某人的密碼:

class user() { 
    function updatePassword($usrName, $newPass) 
    { 
     $con = mysql_connect('db_host', 'db_user', 'db_pass'); 
     $sql = "UPDATE users SET password = '$newPass' WHERE username = '$userName'"; 
     $res = mysql_query($sql, $con); 
     if($res) return true; 
     mysql_close($con); 
    } 
} 

(我有點衝這個,所以藉口的任何語法錯誤:))

正如你可以看到,會使用MySQL更新用戶密碼,但不使用我的MySQL類,這是正確的嗎?我沒有辦法在我的用戶類中使用我的MySQL類而不會看起來很髒。我是否像$DB = new DB();一樣使用它?這將意味着包括我的mysql.class.php某處...

我對此很困惑,所以任何幫助將不勝感激,謝謝。

+1

另外,檢查了上使用PDO而不是過時的程序功能。 PDO更安全,更清潔,並且比'mysql_'功能具有更好的功能。 – ryeguy 2010-03-29 15:17:57

回答

1

是的,你必須包括mysql.class.php才能使用該類。但是這與Java,Python等類似。您必須指定您使用的內容。使現有的類用戶類

的一種方法是調用構造函數與DB類的一個實例:

class User { 
    private $_db; 
    public function __construct($db) { 
     $this->_db = $db; 
    } 

    public function updatePassword($usrName, $newPass) { 
     // use $this->_db here 
    } 

} 

然後:

require 'mysql.class.php' 

$user = new User(new DB()); 
$user->updatePAssword('foo', 'bar'); 
+0

非常好的例子,謝謝。我會等一會兒才能看到其他人的答案,然後我選擇一個:) – Joe 2010-03-29 15:19:02

+0

+1,很好的回答 – user187291 2010-03-29 15:26:04

0

晚自習extending a class。換句話說,inheritance

+0

在這種情況下,擴展類將是錯誤的方法。從邏輯上講,用戶與數據庫無關。 – 2010-03-29 15:18:33

+0

感謝您的鏈接。我之前有點了解類擴展,但不確定在這種情況下使用它是否合適?我真的不想擴展我的MySQL類來包含用戶函數,或者擴展我的用戶類以包含MySQL函數,或者我可能缺少某些東西? :P ---編輯:菲利克斯在我之前到達那裏,謝謝你的幫助:) – Joe 2010-03-29 15:22:45