单例模式是一种比较常用的设计模式,在很多框架中可以看到它的身影。通过单例模式可以确保类只有一个实例化,从而方便对实例个数的控制并节约系统资源。
?phpuse /Exception;html' target='_blank'>class Singleton * 对象实例 * @var object public static $instance; * 获取实例化对象 public static function getInstance() if (!self::$instance instanceof self) { self::$instance = new self(); return self::$instance; * 禁止对象直接在外部实例 private function __construct(){} * 防止克隆操作 final public function __clone() throw new Exception( Clone is not allowed ! }
一个系统中可能会多次使用到单例模式,为了更加方便的创建,可以试着建立一个通用的抽象:
// SingletonFacotry.php ?phpuse /Exception;abstract class SingletonFacotry * 对象实例数组 * @var array protected static $instance = []; * 获取实例化对象 public static function getInstance() $callClass = static::getInstanceAccessor(); if (!array_key_exists($callClass, self::$instance)) { self::$instance[$callClass] = new $callClass(); return self::$instance[$callClass]; abstract protected static function getInstanceAccessor(); * 禁止对象直接在外部实例 protected function __construct(){} * 防止克隆操作 final public function __clone() throw new Exception( Clone is not allowed ! }
// A.php ?phpclass A extends SingletonFactory public $num = 0; protected static function getInstanceAccessor() return A::class;$obj1 = A::getInstance();$obj1- num++;var_dump($obj1- num); // 1$obj2 = A::getInstance();$obj2- num++;var_dump($obj2- num); // 2
以上就是php单例模式的讲解(代码示例)的详细内容,PHP教程
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
新闻热点
疑难解答