|
導讀網頁的本質就是超級文本標記語言,通過結合使用其他的Web技術(如:腳本語言、公共網關接口、組件等),可以創造出功能強大的網頁。因而,超級文本標記語言是萬維網(Web)編程的基礎,也就是說萬維網是建立... 網頁的本質就是超級文本標記語言,通過結合使用其他的Web技術(如:腳本語言、公共網關接口、組件等),可以創造出功能強大的網頁。因而,超級文本標記語言是萬維網(Web)編程的基礎,也就是說萬維網是建立在超文本基礎之上的。超級文本標記語言之所以稱為超文本標記語言,是因為文本中包含了所謂“超級鏈接”點。 本篇文章給大家帶來的內容是關于php單例模式的講解(代碼示例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。單例模式是一種比較常用的設計模式,在很多框架中可以看到它的身影。通過單例模式可以確保類只有一個實例化,從而方便對實例個數的控制并節約系統資源。 <?php
use \Exception;
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
<?php
use \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
<?php
class 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中文網其它相關文章! 網站建設是一個廣義的術語,涵蓋了許多不同的技能和學科中所使用的生產和維護的網站。 |
溫馨提示:喜歡本站的話,請收藏一下本站!