本文目錄一覽:
- 1、什麼是PHP中的工廠設計模式
- 2、PHP工廠模式怎樣將數據庫的結果集實例化
- 3、php設計模式: 請寫出工廠模式和單態模式的PHP5示例代碼
- 4、誰能解釋一下PHP的工廠模式?
- 5、php設計模式之簡單工廠模式~呢?
- 6、PHP怎麼實現工廠模式?
什麼是PHP中的工廠設計模式
工廠模式分為三種:簡單工廠、工廠方法、抽象工廠 ,三種工廠的區別是,抽象工廠由多條產品線,而工廠方法只有一條產品線,是抽象工廠的簡化。而工廠方法和簡單工廠相對,大家初看起來好像工廠方法增加了許多代碼但是實現的功能和簡單工廠一樣。但本質是,簡單工廠並未嚴格遵循設計模式的開閉原則,當需要增加新產品時也需要修改工廠代碼。但是工廠方法則嚴格遵守開閉原則,模式只負責抽象工廠接口,具體工廠交給客戶去擴展。在分工時,核心工程師負責抽象工廠和抽象產品的定義,業務工程師負責具體工廠和具體產品的實現。只要抽象層設計的好,框架就是非常穩定的。
PHP工廠模式怎樣將數據庫的結果集實例化
其實設計模式真的是一套解決方案而已,所以千萬不要對設計模式進行不理解的死記硬背,一定要理解為什麼要用這種設計模式,它一般實際應用在項目哪裡,如果你不這樣做,永遠都不會理解設計模式的奧妙之處。為了可以清晰的了解到什麼是簡單工廠模式,簡單工廠模式應用在哪裡。我們首先從具體實例開始講起。
一、問題的出現。
平時大家在一些開源的cms中,經常會碰到切換數據庫鏈接方式或者切換數據庫類型的例子,例如你可以選擇mysql的,mysqli,pdo的。或者oracle的。每切換一次,就意味着需要生成所選擇的數據庫的鏈接對象。那麼我們如何去實現這樣的對象生成和切換呢?
並且在代碼中,我只希望,我傳一個mysql,然後就可以使用mysql這個類對象,傳一個pdo,就可以pdo這個類對象,如下:
$db_object=db_factory::get_instance(‘pdo’);//這裡你想換哪個數據庫,就填哪個,例如mysql,mysqli,pdo
二、如何解決
這個時候簡單工廠這種方法就可以發揮作用了。
那麼我們可以創建一個工廠類,為什麼叫工廠,因為工廠是用來生產產品的,而這些產品就是對象。所以有下面對應關係
數據庫工廠===》db_factory類
各個數據庫鏈接對象=====》在db_factory中生產出來的對象,注意不是生產db_factory類的對象。
這個裡可能比較難理解,db_factory類中工廠是通過switch來切換獲取對象的。在下面給出的代碼中請慢慢理解
三、概念
簡單工廠模式:用於產生對象(進行對象切換)的方法,既然叫簡單,那麼肯定還有其他複雜點的工廠模式,例如抽象工廠模式,工廠方法模式。
四、如何實現單利模式。
算法:
1、建立一個工廠類,實例化這個工廠類後用這個類的其中一個方法獲取所需的數據庫鏈接對象
2、在工廠類中建立一個getDbObject的方法用於獲取數據庫鏈接對象。
3、在getDbObject方法中,傳入一個數據庫鏈接類型的參數,通過switch來切換類型,根據類型返回不同的數據庫鏈接對象
五、代碼實現:
下面對象中既使用了單利模式也使用了簡單工廠模式
?php
002
003 /**************db_factory.class.php****************/
004 class db_factory{
005 static private $instance=null;
006
007
008 private function __construct(){
009
010 }
011
012 static public function get_instance($db_type=’mysql’){
013 if(self::$instance==null){
014 self::$instance=new self();
015 }
016 $db_factory=self::$instance;
017 return $db_factory-getDbObject($db_type);
018 }
019
020 protected function getDbObject($db_type){
021 switch($db_type){
022 case ‘mysql’:
023 $obj=getMysql::get_instance();
024 break;
025 case ‘mysqli’:
026 $obj=getMysqli::get_instance();
027 break;
028 case ‘pdo’:
029 $obj=getPdo::get_instance();
030 break;
031 default :
032 $obj=getMysql::get_instance();
033 }
034 return $obj;
035 }
036 }
037
038 /**************getMysql.class.php****************/
039 class getMysql{
040 static private $instance=null;
041
042 private function __construct(){
043 }
044
045 static public function get_instance(){
046 if(self::$instance==null){
047 self::$instance=new self();
048 }
049 return self::$instance;
050 }
051
052 function select(){
053 echo ‘mysql獲取數據’;
054 }
055 }
056
057 /**************getMysqli.class.php****************/
058 class getMysqli{
059 static private $instance=null;
060
061 private function __construct(){
062 }
063
064 static public function get_instance(){
065 if(self::$instance==null){
066 self::$instance=new self();
067 }
068 return self::$instance;
069 }
070
071 function select(){
072 echo ‘mysqli獲取數據’;
073 }
074 }
075
076 /**************getPdo.class.php****************/
077 class getPdo{
078 static private $instance=null;
079
080 private function __construct(){
081 }
082
083 static public function get_instance(){
084 if(self::$instance==null){
085 self::$instance=new self();
086 }
087 return self::$instance;
088 }
089
090 function select(){
091 echo ‘pdo獲取數據’;
092 }
093 }
094
095
096
097
098
099
100
101 /**************客戶端調用****************/
102 $db_object=db_factory::get_instance(‘pdo’);//這裡你想換哪個數據庫,就填哪個,例如mysql,mysqli,pdo
103 $db_object-select();
104
105
106
107 ?
五、應用:在需要到對象的切換時可以考慮這種模式,但是對象的切換數最好不要超過10,多了之後這種方法的弊端就會顯現,會變得很累贅。
php設計模式: 請寫出工廠模式和單態模式的PHP5示例代碼
Example #1 調用工廠方法(帶參數)
?php
class Example
{
// The parameterized factory method
public static function factory($type)
{
if (include_once ‘Drivers/’ . $type . ‘.php’) {
$classname = ‘Driver_’ . $type;
return new $classname;
} else {
throw new Exception (‘Driver not found’);
}
}
}
?
————————————
Example #2 單例模式
?php
class Example
{
// 保存類實例在此屬性中
private static $instance;
// 構造方法聲明為private,防止直接創建對象
private function __construct()
{
echo ‘I am constructed’;
}
// singleton 方法
public static function singleton()
{
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}
// Example類中的普通方法
public function bark()
{
echo ‘Woof!’;
}
// 阻止用戶複製對象實例
public function __clone()
{
trigger_error(‘Clone is not allowed.’, E_USER_ERROR);
}
}
?
誰能解釋一下PHP的工廠模式?
工廠模式是程序設計模式的一種。
一般是在某個基礎類上創建一個靜態方法,根據參數來生成某個子類。這個方法,稱為工廠方法。
類比到現實,就像一個工廠,包含幾種產品,會根據客戶的訂單需求生產出指定的產品供客戶使用。
最簡單的用法:
class Pizza{
public $price;
public static function factory($type)
{
if($type==’veget’){
return new VegetPizza();
}elseif($type==’fruit’){
return new FruitPizza();
}
}
}
class VegetPizze extends Pizza{
}
class FruitPizze extends Pizza{
}
大概邏輯是這樣的,具體實現上有好幾種寫法,你可以搜索設計模式深入了解一五
php設計模式之簡單工廠模式~呢?
這個問題有些模糊 我在多個點解釋下1.運行環境 .NET 是微軟的產品 理論上只能在windows 下運行 跨平台很差 PHP 可以再 Windows 和 Linux 上運行 跨平台很好2.學習成本 PHP 弱類型語言(鬆散型),簡單,容易上手 .NET 我最早是做.NET 的 .NET 學習成本較高 時間較長3.運行效率 這個仁者見仁智者見智 主要看開發人員的水平了。不過現在 很多網站 都使用 PHP MYSQL Apache 的組合來開發 因為成本低就是這樣的了,建議你還去後盾人學習一下,那裡都是專家手把手教你
PHP怎麼實現工廠模式?
?php
/**
* 單例模式和工廠模式
*
* 保證一個類僅有一個實例,並提供一個訪問它的全局訪問點
*
*/
class Singleton
{
static private $_instance = null;
private function __construct()
{
}
static public function getInstance($class=”)
{
if(empty($class)){
if(is_null(self::$_instance)) {
self::$_instance = new Singleton();
}
return self::$_instance;
}else{
static $class_object=array();
if(empty($class_object[$class])){
include dirname(__FILE__).’/includes/classes/’.$class.’.class.php’;
$class_object[$class]=new $class();
}
return $class_object[$class];
}
}
public function display()
{
echo “it is a singlton class function”;
}
}
// $obj = new Singleton(); // 聲明不能成功
$obj = Singleton::getInstance();
var_dump($obj);
$obj-display();
$obj1 = Singleton::getInstance();
var_dump(($obj === $obj1));
原創文章,作者:CZSL,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/144732.html