設計模式經常在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(私有)來實現的。被定義爲公有的類成員可以在任何地方被訪問。被定義爲受保護的類成員則可以被其自身以及其子類和父類訪問。被定義爲私有的類成員則只能被其定義所在的類訪問。