使用以下爲例(與$ DB是一個先前創建的數據庫連接對象)...「超全局對象」
Class Session {
function write_log() {
global $db;
$db->query(...);
}
}
有沒有一種方法,以避免編寫「全球$ DB」每次我想在另一個類中使用$ db對象?換句話說,從一開始就宣佈$ db對象爲超全局。
使用以下爲例(與$ DB是一個先前創建的數據庫連接對象)...「超全局對象」
Class Session {
function write_log() {
global $db;
$db->query(...);
}
}
有沒有一種方法,以避免編寫「全球$ DB」每次我想在另一個類中使用$ db對象?換句話說,從一開始就宣佈$ db對象爲超全局。
傳遞$db
在類的構造函數:
class Session {
function __construct($db) {
$this->db = $db;
}
function write_log() {
$this->db->query(...);
}
}
裏調用:
$session = new Session($db);
這是正確的方法......使用全局變量將使你的代碼變得不可讀,不可維護,幾個月或幾年後你可用... – hacksteak25 2010-09-15 20:49:54
Superglobals是一組特定的內置PHP所提供的變量,這些變量的任何地方訪問,而無需聲明爲global
:
$GLOBALS
$_SERVER
$_GET
$_POST
$_FILES
$_COOKIE
$_SESSION
$_REQUEST
$_ENV
一般來說,不可能創建自己的超全球。
你可以一個$db
成員然而添加到您的Session
類,並參考$this->db
代替:
class Session
{
public $db;
function __construct()
{
$this->db = ... // set up $db object
// ...
}
function write_log()
{
$this->db->query(...);
}
}
+1用於解釋超全域用戶 – 2010-09-15 20:50:22
它可以創建自己的超全局用戶(http://www.php.net/manual/en/runkit.configuration.php)。但是,人們不應該這樣做。 – Wrikken 2010-09-15 20:55:38
@Wrikken夠公平的,我沒有意識到這一點。 – 2010-09-15 20:59:51
相關:http://stackoverflow.com/questions/1812472/in-a-php-project-如何組織和訪問你的幫助對象 – 2010-09-15 21:00:07
[從類和腳本訪問全局對象(如數據庫或日誌)的最佳方式?](http://stackoverflow.com/questions/1967548/best-way-to-access-global-objects-like-database-or-log-from-classes-and-scripts) – Wrikken 2010-09-15 21:07:25