单例模式 :生成一个且只生成一个对象实例
<?php
class Preferences
{
private $props = array();
//无法在类外部访问
private static $instance;
//构造函数私有 无法直接new
private function __construct()
{
}
//此处为公共入口 静态方法可以访问静态属性,无法使用类的实例
public static function getInstance()
{
if (empty(self::$instance)) {
self::$instance = new Preferences();
}
return self::$instance;
}
public function setProperty($key, $val)
{
$this->props[$key] = $val;
}
public function getProperty($key)
{
return $this->props[$key];
}
}
$pref = Preferences::getInstance();
$pref->setProperty("name", "matt");
unset($pref); // remove the reference
$pref2 = Preferences::getInstance();
print $pref2->getProperty("name") . "\n"; // demonstrate value is not lost
执行以上代码后,可得
matt
全局变量不受保护,但不可避免,我们需要一个提供所有类都能访问某个对象存在
问题:
Preferences对象应该可以被系统中的任何对象使用
Preferences对象不应该被存储在会被覆写的全局变量中
系统中不应超过一个preferences对象.
也就是说Y对象可以设置preferences对象个一个属性,而Z对象不需要其他对象就可以直接获取该属性的值
结果:适度使用单例模式,可以不用传递那些不必要的对象.是对全局变量一种改进
网友评论