php 单例模式的实现

<?php

class Single
{
    private static $_instance = null;

    private function __construct()
    {
    }

    private function __clone()
    {
        // TODO: Implement __clone() method.
    }

    public static function getInstance()
    {
        if (!(self::$_instance instanceof self)) {   // 使用instanceof 判断 $_instance 是否为Single类的实例
            self::$_instance = new self();           // 如果$_instance 不是Single类的实例 就将其实例
        }
        return self::$_instance;
    }
}

$test = Single::getInstance();
  • 首先需要把 构造函数和克隆魔术方法都设置成是私有的 防止类被实例
  • 提供静态公共方法 getInstance() 来实例类
  • 为什么使用静态方法来实例
    • 静态的方法在整个应用程序其间存储在内存中,速度快,但占用内存.
    • 动态的方法在先声明类实例才能调用类中的方法
    • 一般使用频繁的方法用静态方法,用的少的方法用动态的。静态的速度快,占内存。动态的速度相对慢些,但调用完后,立即释放类,可以节省内存,可以根据自己 的需要选择是用动态方法还是静态方法
    • 静态方法主要的问题就是数据同步的问题。如果你的静态方法的类中不保存私有变量那么什么问题都不会有的。最好是包要操作的数据全部以参数的方式传到方法中去
    • 静态方法是类方法,调用时不需要创建类实例
    • 静态方法是静态绑定到子类,不是被继承

猜你喜欢

转载自blog.csdn.net/qq_36431213/article/details/79945093