设计模式经常在composer包中很常见,今天来学习一下PHP设计模式-单例模式
- 1、单例模式
<?php
class sigle
{
private static $ins;
//防止被串改继承 该方法的的属性public
final protected function __construct()
{
}
public static function getIns()
{
if (self::$ins === NULL)
{
self::$ins = new self();
}
return self::$ins;
}
//防止被克隆
final protected function __clone()
{
// TODO: Implement __clone() method.
}
}
$obj = sigle::getIns();
$obj1 = sigle::getIns();
if ($obj === $obj1)
{
echo '===';
}
else
{
echo '!==';
}
以上就是一个完整的单例模式。
以下2点容易忽略的
1、function __construct 容易被子类继承,而变成public属性的方法 或者直接设置成 private 属性
2、function __clone 容易被克隆,导致单例失效或者直接设置成 private 属性
基础知识普及:
Final 关键字 ¶
PHP 5 新增了一个 final 关键字。如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。
访问控制(可见性) ¶
对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。被定义为公有的类成员可以在任何地方被访问。被定义为受保护的类成员则可以被其自身以及其子类和父类访问。被定义为私有的类成员则只能被其定义所在的类访问。