使用以下为例(与$ 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