2010-03-18 63 views
0

我遇到了擴展MySQLi類的問題。它不會讓我添加任何屬性。擴展MySQLi

class MySQLii extends MySQLi { 

public $database; 

public function MySQLii($host, $username, $password, $database){ 

    // Initialize MySQLi 
    parent::MySQLi($host, $username, $password, $database); 

    // Save database name 
    $this->database = $database; 

} 

} 

$mysqlii = new MySQLii('localhost', 'root', 'password', 'database'); 

var_dump($mysqlii); 

對象(MySQLii)#1(17){
[ 「affected_rows」] => INT(0)
[ 「CLIENT_INFO」] =>串(48) 「mysqlnd 5.0。 5-dev的 - 081106 - $修訂:289630 $」
[ 「client_version」] => INT(50005)
[ 「connect_errno」] => INT(0)
[ 「connect_error」] => NULL
[「errno」] => int(0)[「error」] =>
字符串(0)「」[「field_count」] =>
int(0)[「host_info」] => string(42) 「MySQL主機信息:通過UNIX的本地主機 socket」[「info」] => NULL
[ 「INSERT_ID」] => INT(0)
[ 「SERVER_INFO」] =>串(6) 「44年5月1日」 [ 「SERVER_VERSION」] => INT(50144)
[ 「SQLSTATE」 ] =>串(5) 「00000」
[ 「PROTOCOL_VERSION」] => INT(10)
[ 「的thread_id」] => INT(4019)
[ 「WARNING_COUNT」] => INT(0)}

請注意,我沒有在MySQLii構造函數中添加的database屬性。我錯過了什麼嗎?

回答

0

顯然擴展MySQLi類使其不可能添加其他屬性。壞PHP。壞。

0

嗯,要麼我失去了一些東西,或者你命名你的構造函數MySQLii,而不是__construct。 (這是不是Java;))

適當地重新命名它,因爲它看起來好像你的構造不叫問題會得到解決。

+0

你也可以用你的構造函數的函數名替換PHP中類的函數名。 – 2010-03-18 19:41:39

0

我剛剛通過擴展兩個類(按照PHP 5.3和5.2)對MySQLiMySQLi_STMT進行了封裝。我可以確認,雖然這些變量在您將其轉儲爲var_dump時沒有出現,但類方法像訪問任何其他普通對象一樣訪問變量沒有問題。

class Foo extends MySQLi 
{ 
    public $var = 'blah'; 

    public function blah() 
    { 
     echo $this->var; 
    } 
} 

$foo = new Foo(); 
echo $foo->var; 
$foo->blah(); 

從類外部訪問變量也按預期工作。只要你通常不使用var_dump找出哪個變量存在或其他非正統的功能,只需要像平常一樣進行編碼,你就沒有問題了。