单例模式

单例模式 :生成一个且只生成一个对象实例

<?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对象不需要其他对象就可以直接获取该属性的值
结果:适度使用单例模式,可以不用传递那些不必要的对象.是对全局变量一种改进

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容