2010-09-05 38 views
1

這是我使用通過數據庫句柄到我的類代碼:調用一個成員函數的非對象錯誤做準備()

$db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); 
if ($db->connect_error) 
    die('MySQL connection error (' . $db->connect_errno . ') ' . $db->connect_error); 

$linkgen = new Linkgen($db); 
echo $linkgen->getLinksLeft(); 

而且這是在Linkgen類的代碼:

class Linkgen { 
    private $db; // our database handle 
    private $linksLeft; 

    function __contruct($db) 
    { 
     $this->db = $db; 
    } 

    function getLinksleft() 
    { 
     $ip = $_SERVER['REMOTE_ADDR']; 
     $q = $this->db->prepare("SELECT links_left FROM `limits` WHERE ip=?"); 
     $q->bind_param("s", $ip); 
     $q->execute(); 
     $q->bind_result($this->linksLeft); 
     $q->fetch(); 
     printf("%i links left", $this->linksLeft); 
     $q->close(); 
    } 
} 

由於某種原因,當我調用getLinksLeft方法時,出現非對象錯誤。我無法弄清楚這一點,因爲從我可以看到我正確引用數據庫句柄。

任何幫助表示讚賞,謝謝。

回答

3

爲什麼不擴展你的對象成爲mysqli的一部分?

class Linkgen extends mysqli 
{ 
    private $_linksLeft; 

    function __construct() 
    { 
     parent::__construct(DB_HOST, DB_USER, DB_PASS, DB_NAME); 
    } 

    function getLinksleft() 
    { 
     $ip = $_SERVER['REMOTE_ADDR']; 
     $q = $this->prepare("SELECT links_left FROM `limits` WHERE ip=?"); 
     $q->bind_param("s", $ip); 
     $q->execute(); 
     $q->bind_result($this->_linksLeft); 
     $q->fetch(); 
     printf("%i links left", $this->_linksLeft); 
     $q->close(); 
    } 
    //... 
} 

//Usage: 
$Linkgen = new Linkgen(); 
echo $Linkgen->getLinksLeft(); 

如果你仍然想固定你的錯誤,那麼你必須拼寫小姐__construct;)

0

那是因爲你$dbLinkgen類爲null或取消。在調用getLinksleft()之前,您需要檢查它。

+1

這個問題已經超過2年了,並且已經被成功地回答和接受了。嘗試將注意力集中在新問題上! – 2012-11-15 19:36:43

相關問題