2012-11-02 29 views
2

我在包含文件中有一個PDO對象,當我在主頁面中使用它時效果很好。 當我把它傳入一個對象內部使用它時,它根本就不工作。 (函數xxxx(& dbd){this - > $ db = & dbd}),只是不工作,但如果我傳遞另一種類型的值(作爲一個字符串),可以工作完善。如果我發送一個$ db =「olaola」它可以工作,但如果它是一個PDO,它就會失敗。我是一個新手在PHP和英語,所以要有耐心,請:P將PDO數據庫對象實例傳遞給其他類函數

包含的文件:

$username = "root"; 
$password = "*****"; 
$host = "localhost"; 
$dbname = "dbname"; 
$db = NULL; 
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'); 

try 
{ 
    $db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options); 
} 
catch(PDOException $ex) 
{ 
    die("Failed to connect to the database: " . $ex->getMessage()); 
} 

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 

$pagMenu = new pages($db); 

在頁面類:

class pages { 

    private $db; 

    function __construct($db) { 
     $this->$db = $db; 
    } 
} 
+0

你會得到什麼例外? –

+0

「不起作用」是什麼意思?它做什麼或不做什麼? – deceze

+0

你如何訪問班級頁面中的$ db對象? (你不能從外部訪問它,因爲它在你的例子中是私有的) – Vengarioth

回答

5

你應該做

$this->db = $db; 

,而不是

$this->$db = $db; 

第二種形式是variable variable,這意味着你要分配參數的一個名爲的內容變量的值變量,如果該內容是PDO對象,將返回一個錯誤。

+0

需要很多。順便說一句,你知道爲什麼我可以在主要使用de db對象,但是當我在「pages」類中使用它時將不起作用嗎?在pages函數中生成的查詢的fetchAll返回一個空數組,並在主結果中返回值。 – CondeGil

+0

在main中使用$ db對象應該給出與在pages類中使用$ this-> db相同的結果,因爲它們是相同的。不知道錯誤可能是什麼。 –

5

語法是:

$this->db = $db; 

不是$this->$db

+0

斑點。你知道它爲什麼與弦一起工作嗎? –

+2

因爲字符串解析爲適當的「變量變量」,或者更確切地說是「變量屬性」。一個對象不是有效的變量名稱。 – deceze

+0

你也應該把它寫在答案中。 –