2010-01-17 90 views
3

是否可以將對象傳遞給PHP類的構造函數,並將該對象設置爲全局變量,該類可以被類中的其餘函數使用?將對象傳遞給PHP構造函數錯誤

例如:

class test { 

    function __construct($arg1, $arg2, $arg3) { 
     global $DB, $ode, $sel; 

     $DB = arg1; 
     $ode = arg2; 
     $sel = $arg3; 
    } 

    function query(){ 
     $DB->query(...); 
    } 

} 

當我嘗試這樣做,我得到一個「調用一個成員函數的非對象」的錯誤。無論如何要做到這一點?否則,我必須直接將對象傳遞給每個單獨的函數。

謝謝!

回答

6

您可能想要將它們分配給$this上的值。

在你的構造函數,你會怎麼做:

$this->DB = $arg1; 

然後在您的查詢功能:

$this->DB->query(...); 

這同樣應與其他參數的構造函數中完成。

$this在實例上下文中是如何引用當前實例。還有關鍵字parent::self::分別訪問超類的成員和類的靜態成員。

+0

這工作,你的幫助的感謝!如果我想用非對象來做同樣的事情呢?比方說,我想要傳遞一個整數或字符串? – littleK 2010-01-17 08:02:31

+1

工作方式相同。 – 2010-01-17 08:03:20

+1

以同樣的方式工作。只要它是一個有效的標識符(類似於有效的變量名稱),您可以將任何字段放在$ this上。所以你可以做'$ this-> name =「somestring」;'或'$ this-> name = $ name;'等。這不限於構造函數,類中的任何方法都可以修改'$ this '。 – Crast 2010-01-17 08:04:44

1

您可以通過存儲參數作爲對象的屬性做到這一點很容易地:

function __construct($arg1, $arg2, $arg3) { 
    $this->db = arg1; 
} 

function f() 
{ 
    $this->db->query(...); 
} 
2

作爲一個側面說明...
甚至認爲這不是需要,它是一般認爲最好在類中聲明成員變量。它可以讓你更好地控制他們:

<?php 
class test { 
    // Declaring the variables. 
    // (Or "members", as they are known in OOP terms) 
    private $DB; 
    protected $ode; 
    public $sel; 

    function __construct($arg1, $arg2, $arg3) { 
     $this->DB = arg1; 
     $this->ode = arg2; 
     $this->sel = $arg3; 
    } 

    function query(){ 
     $this->DB->query(...); 
    } 
} 
?> 

PHP: Visibility的詳細信息,privateprotectedpublic之間的差異。

2

假設你有一個數據庫對象

$db = new db(); 

和另一個對象:

$object = new object($db); 

class object{ 

    //passing $db to constructor 
    function object($db){ 

     //assign it to $this 
     $this-db = $db; 

    } 

    //using it later 
    function somefunction(){ 

     $sql = "SELECT * FROM table"; 

     $this->db->query($sql); 

    } 

}