2014-07-19 110 views
0

今天我試圖將我的代碼轉換爲PHP/MySQLi OOP代碼。PHP代碼轉換爲PHP/MySQLi OOP

class Database 
{ 
private $host; 
private $user; 
private $password; 
private $db; 
private $mysqli; 

function __construct() 
{ 
    $this->host = "*****"; 
    $this->user = "*****"; 
    $this->password = "******"; 
    $this->db = "*****"; 

    $this->mysqli = new mysqli($this->host, $this->user, $this->password, $this->db); 

    if (mysqli_connect_errno()): 
     printf("Connect failed: %s\n", mysqli_connect_error()); 
     exit(); 
    endif; 
} 
} 

這是查詢的腳本:

include_once("WD_Config/database.php"); 

class Adressen_Db 
{ 
function __construct() 
{ 
    $this->database = new Database(); 
} 

public function selecteer() 
{ 
    $query = "SELECT * FROM wd_adressen WHERE verborgen = 0 ORDER BY naam ASC"; 
    $result = $this->database->mysqli->query($query); 

    return $result; 
} 
} 

這也是我怎麼稱呼它。

$adressen = new Adressen_Db; 
$adressen_result = $adressen->selecteer(); 

echo "<p>"; 
while ($row = $adressen_result->fetch_assoc()): 
echo "<a href='http://maps.google.com/?q=".$row['voladres']."'  target='_blank'>".$row['naam']."</a> woonachtig op <i>".$row['voladres']."</i><br>"; 
endwhile; 
echo "</p>"; 

我總是得到一個「調用一個非對象的成員函數query()」。不要緊,我特里...

有人可以告訴我爲什麼這是?

謝謝!

+0

您需要更改爲公開。 'private $ mysqli;'到'public $ mysqli;'。 –

+0

'Database :: mysqli'是私人的 – PeeHaa

+0

謝謝戴夫,這確實有效!但不應該$ mysqli總是私人的? –

回答

0

我想,而你肯定需要有$mysqli公共所以它可以在其他的方法來訪問,有可能是別的東西,因爲錯誤會像

試圖訪問私有財產數據庫類

或類似的東西,而你的腳本拋出一個非對象調用錯誤

我覺得你new Adressen_Db;缺少括號:

$adressen = new Adressen_Db(); 
5

類Database中的$mysqli變量聲明爲private

您只能通過setter和getters訪問它。