我正在尝试使用单例方法来访问全局对象(在此示例中为“用户名”)。我的问题是如何修改此问题,以便在DB->connect()
函数中我可以执行echo $this->username;
而不用声明$ username或更改最后2行?
class CI_Base {
private static $instance;
public function CI_Base()
{
self::$instance =& $this;
}
public static function &get_instance()
{
return self::$instance;
}
}
function &get_instance() {
return CI_Base::get_instance();
}
class Foo {
function run() {
$CI = & get_instance();
$CI->username = "test";
$db = new DB;
$db->connect();
}
}
class DB extends Foo {
function connect() {
$CI = & get_instance();
echo $CI->username;
}
}
$foo = new Foo;
$foo->run();
答案 0 :(得分:1)
这应该有效
class Foo {
function __get($field) {
if ($field == "username") {
//don't need to create get_instance function
$CI = CI_Base::get_instance();
return $CI->username;
}
}
}
您可以将对Foo中的非现有字段的所有访问权限传递给$ instance object:
class Foo {
function __get($field) {
$CI = CI_Base::get_instance();
return $CI->$field;
}
}
class DB extends Foo {
function connect() {
// this->username will call __get magic function from base class
echo this->username;
}
}
在php5中你不需要在get_instance
之前加上&符号因为所有对象都是通过引用传递的。