這篇文章介紹的內容是關於PHP單例和工廠模式 ,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
工廠模式:
<?php interface persion{ public function say(); } class man implements persion{ public function say(){ echo 'i am man'; } } class factory{ public static function createman(){ return new man(); } } $obj = factory::createman(); $obj->say();
工廠模式,常用的就是改了man類別的名稱,只需要改下工廠類別factory裡邊createman類別的內容就可以了,其他呼叫類別的地方都不用改,工廠模式其實就是再呼叫類別的地方跟類別之間又加了一層工廠類,呼叫的位址直接呼叫工廠類別
單例模式:
單列模式常用到連接資料庫的類,例如:
<?php class Database { // 声明$instance为私有静态类型,用于保存当前类实例化后的对象 private static $instance = null; // 数据库连接句柄 private $db = null; // 构造方法声明为私有方法,禁止外部程序使用new实例化,只能在内部new private function __construct($config = array()) { $dsn = sprintf('mysql:host=%s;dbname=%s', $config['db_host'], $config['db_name']); $this->db = new PDO($dsn, $config['db_user'], $config['db_pass']); } // 这是获取当前类对象的唯一方式 public static function getInstance($config = array()) { // 检查对象是否已经存在,不存在则实例化后保存到$instance属性 if(self::$instance == null) { self::$instance = new self($config); } return self::$instance; } // 获取数据库句柄方法 public function db() { return $this->db; } // 声明成私有方法,禁止克隆对象 private function __clone(){} // 声明成私有方法,禁止重建对象 private function __wakeup(){} } $config = array( 'db_name' => 'test1', 'db_host' => 'localhost', 'db_user' => 'root', 'db_pass' => '' ); //获取数据库连接句柄 $obj = database::getInstance($config); $db = $obj->db();
單例模式簡單理解就是把類別的建構子弄成私有屬性,這樣就可以禁止外部直接實例化,然後再弄個靜態方法,在這個方法裡判斷當前類別有沒有實例化對象,如果沒有就實例化自己,然後賦值給一個類別屬性傳回,如果有實例化則直接傳回這個實例化物件
以上是PHP單例和工廠模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!