例如,我的应用程序正在使用User对象的实例,而其他不同的对象必须访问某些属性和方法。并且这些对象实例化其他对象,而这些对象又必须访问User。管理这个的最佳方法是什么?当我实例化这些新对象时,将User对象作为参考传递?
以下是如何完成此操作的示例:
class App { private $user; private $controller; public function __construct() { $this->user = new User(); $this->controller = new Controller(); $this->controller->setUser(& $this->user); } }
这是正确的方法吗?
编辑:有没有办法让User实例成为全局变量?
答案 0 :(得分:2)
只是在评论中提出我的建议
您可以实施单例模式
class User {
protected static $instance = null;
protected function __construct () { /* disable external instanciation */ }
private function __clone () { /* disable clone */ }
public static function getInstance () {
if (is_null(self::$instance)) {
self::$instance = new self();
}
return self::$instance;
}
}
以下是阅读内容:)
答案 1 :(得分:1)
有没有办法让User实例成为全局var?
听起来像单身人士会有所帮助:
class User
{
private static $instance;
private function __construct() { }
public function instance()
{
return self::$instance ? self::$instance : (self::$instance = new self());
}
}
$user = User::instance();
基本上只需要用户的任何内容,只需拨打User::instance()
而不是new User()
。它们都将在对象的同一个实例上运行,因此这仅适用于User对象在整个脚本持续时间内表示相同的数据。
更新
您的评论“否,一个用户可以对其他用户执行操作”,则此模式不适用于每种用途。
听起来你只需将$user
对象传递给任何需要它的人。 (当然,您仍然可以使用单例来表示经过身份验证的用户。)