導航:首頁 > 編程語言 > php類設計

php類設計

發布時間:2022-04-28 17:10:25

A. php設計模式有哪些

1.工廠模式
工廠模式是一種類,它具有為您創建對象的某些方法。您可以使用工廠類創建對象,而不直接使用 new。這樣,如果您想要更改所創建的對象類型,只需更改該工廠即可。使用該工廠的所有代碼會自動更改。
2.單元素模式
某些應用程序資源是獨占的,因為有且只有一個此類型的資源。例如,通過資料庫句柄到資料庫的連接是獨占的。您希望在應用程序中共享資料庫句柄,因為在保持連接打開或關閉時,它是一種開銷,在獲取單個頁面的過程中更是如此。
3.觀察者模式
觀察者模式為您提供了避免組件之間緊密耦合的另一種方法。該模式非常簡單:一個對象通過添加一個方法(該方法允許另一個對象,即觀察者 注冊自己)使本身變得可觀察。當可觀察的對象更改時,它會將消息發送到已注冊的觀察者。這些觀察者使用該信息執行的操作與可觀察的對象無關。結果是對象可 以相互對話,而不必了解原因。
4.命令鏈模式
命令鏈 模式以鬆散耦合主題為基礎,發送消息、命令和請求,或通過一組處理程序發送任意內容。每個處理程序都會自行判斷自己能否處理請求。如果可以,該請求被處理,進程停止。您可以為系統添加或移除處理程序,而不影響其他處理程序。
5.策略模式
我們講述的最後一個設計模式是策略 模式。在此模式中,演算法是從復雜類提取的,因而可以方便地替換。例如,如果要更改搜索引擎中排列頁的方法,則策略模式是一個不錯的選擇。思考一下搜索引擎 的幾個部分 —— 一部分遍歷頁面,一部分對每頁排列,另一部分基於排列的結果排序。在復雜的示例中,這些部分都在同一個類中。通過使用策略模式,您可將排列部分放入另一個 類中,以便更改頁排列的方式,而不影響搜索引擎的其餘代碼。

B. php設計模式的好處在哪裡

如果使用UserFactory,你就不用知道有User類的存在,抽象類幫你隱藏它,以後要是類多了,該模式維護起來就比較方便,建議你去了解抽象工廠模式,工廠模式,工廠方法模式,這些都是為了可復用編程的手段。

C. PHP設計模式的介紹

《PHP設計模式》首先介紹了設計模式,講述了設計模式的使用及重要性,並且詳細說明了應用設計模式的場合。接下來,本書通過代碼示例介紹了許多設計模式。最後,本書通過全面深入的案例分析說明了如何使用設計模式來計劃新的應用程序,如何採用PHP語言編寫這些模式,以及如何使用書中介紹的設計模式修正和重構已有的代碼塊。作者採用專業的、便於使用的格式來介紹相關的概念,自學成才的編程人員與經過更多正規培訓的編程人員都會非常熟悉這種格式。

D. 怎麼理解php中的設計模式

1、單例模式:PHP中的對象生存期間是從該腳本開始一直到該腳本結束為止,因此PHP的單例模式只是在一個頁面中(這里可能包含很多其他頁面,不是狹義的單頁面)多次用到該對象時才會起作用,多次用到時不去重復的new對象(多個人做一個項目時,難免會碰到一次請求中多次實例一個對象的情況),將不會耗費不必要的資源(數據控連接操做效果很明顯),還有一點就是可以保證整個腳本中都是同一個對象,這種模式是怎麼實現的呢,他的實現有幾個要注意的點:

a. 首先就是要將__construct()方法定義為私有方法,這樣就不能通過new來得到一個新的實例了,單例模式不能在外部進行實例化,這能字自身內部進行實例化;

E. PHP有哪幾種設計模式

PHP 一般有五種常見的設計模式

工廠模式

工廠模式 是一種類,它具有為您創建對象的某些方法。您可以使用工廠類創建對象,而不直接使用 new。這樣,如果您想要更改所創建的對象類型,只需更改該工廠即可。使用該工廠的所有代碼會自動更改。

例如:
<?php
interface IUser
{
function getName();
}

class User implements IUser
{
public function __construct( $id ) { }

public function getName()
{
return "Jack";
}
}

class UserFactory
{
public static function Create( $id )
{
return new User( $id );
}
}

$uo = UserFactory::Create( 1 );
echo( $uo->getName()."\n" );
?>

單元素模式

某些應用程序資源是獨占的,因為有且只有一個此類型的資源。例如,通過資料庫句柄到資料庫的連接是獨占的。您希望在應用程序中共享資料庫句柄,因為在保持連接打開或關閉時,它是一種開銷,在獲取單個頁面的過程中更是如此。

單元素模式可以滿足此要求。如果應用程序每次包含且僅包含一個對象,那麼這個對象就是一個單元素(Singleton)。

例如:
<?php
require_once("DB.php");

class DatabaseConnection
{
public static function get()
{
static $db = null;
if ( $db == null )
$db = new DatabaseConnection();
return $db;
}

private $_handle = null;

private function __construct()
{
$dsn = 'mysql://root:password@localhost/photos';
$this->_handle =& DB::Connect( $dsn, array() );
}

public function handle()
{
return $this->_handle;
}
}

print( "Handle = ".DatabaseConnection::get()->handle()."\n" );
print( "Handle = ".DatabaseConnection::get()->handle()."\n" );
?>

觀察者模式

觀察者模式為您提供了避免組件之間緊密耦合的另一種方法。該模式非常簡單:一個對象通過添加一個方法(該方法允許另一個對象,即觀察者 注冊自己)使本身變得可觀察。當可觀察的對象更改時,它會將消息發送到已注冊的觀察者。這些觀察者使用該信息執行的操作與可觀察的對象無關。結果是對象可以相互對話,而不必了解原因。

例如:
<?php
interface IObserver
{
function onChanged( $sender, $args );
}

interface IObservable
{
function addObserver( $observer );
}

class UserList implements IObservable
{
private $_observers = array();

public function addCustomer( $name )
{
foreach( $this->_observers as $obs )
$obs->onChanged( $this, $name );
}

public function addObserver( $observer )
{
$this->_observers []= $observer;
}
}

class UserListLogger implements IObserver
{
public function onChanged( $sender, $args )
{
echo( "'$args' added to user list\n" );
}
}

$ul = new UserList();
$ul->addObserver( new UserListLogger() );
$ul->addCustomer( "Jack" );
?>

命令鏈模式

命令鏈 模式以鬆散耦合主題為基礎,發送消息、命令和請求,或通過一組處理程序發送任意內容。每個處理程序都會自行判斷自己能否處理請求。如果可以,該請求被處理,進程停止。您可以為系統添加或移除處理程序,而不影響其他處理程序。

例如:
<?php
interface ICommand
{
function onCommand( $name, $args );
}

class CommandChain
{
private $_commands = array();

public function addCommand( $cmd )
{
$this->_commands []= $cmd;
}

public function runCommand( $name, $args )
{
foreach( $this->_commands as $cmd )
{
if ( $cmd->onCommand( $name, $args ) )
return;
}
}
}

class UserCommand implements ICommand
{
public function onCommand( $name, $args )
{
if ( $name != 'addUser' ) return false;
echo( "UserCommand handling 'addUser'\n" );
return true;
}
}

class MailCommand implements ICommand
{
public function onCommand( $name, $args )
{
if ( $name != 'mail' ) return false;
echo( "MailCommand handling 'mail'\n" );
return true;
}
}

$cc = new CommandChain();
$cc->addCommand( new UserCommand() );
$cc->addCommand( new MailCommand() );
$cc->runCommand( 'addUser', null );
$cc->runCommand( 'mail', null );
?>

策略模式

我們講述的最後一個設計模式是策略 模式。在此模式中,演算法是從復雜類提取的,因而可以方便地替換。例如,如果要更改搜索引擎中排列頁的方法,則策略模式是一個不錯的選擇。思考一下搜索引擎的幾個部分 —— 一部分遍歷頁面,一部分對每頁排列,另一部分基於排列的結果排序。在復雜的示例中,這些部分都在同一個類中。通過使用策略模式,您可將排列部分放入另一個類中,以便更改頁排列的方式,而不影響搜索引擎的其餘代碼。

例如:
<?php
interface IStrategy
{
function filter( $record );
}

class FindAfterStrategy implements IStrategy
{
private $_name;

public function __construct( $name )
{
$this->_name = $name;
}

public function filter( $record )
{
return strcmp( $this->_name, $record ) <= 0;
}
}

class RandomStrategy implements IStrategy
{
public function filter( $record )
{
return rand( 0, 1 ) >= 0.5;
}
}

class UserList
{
private $_list = array();

public function __construct( $names )
{
if ( $names != null )
{
foreach( $names as $name )
{
$this->_list []= $name;
}
}
}

public function add( $name )
{
$this->_list []= $name;
}

public function find( $filter )
{
$recs = array();
foreach( $this->_list as $user )
{
if ( $filter->filter( $user ) )
$recs []= $user;
}
return $recs;
}
}

$ul = new UserList( array( "Andy", "Jack", "Lori", "Megan" ) );
$f1 = $ul->find( new FindAfterStrategy( "J" ) );
print_r( $f1 );

$f2 = $ul->find( new RandomStrategy() );
print_r( $f2 );
?>

F. 如何設計一個php自動載入類

在php中,自動載入一般都是通過魔術方法__autoload來實現的,在程序中,當需要一個類的定義文件時(如實例化一個對象,集成自一個類),如找不到類定義文件時,就會自動觸發__autoload方法,所以我們可以在該方法中編寫代碼完成類的載入。要編寫代碼實現類的自動載入,很重要的兩點一是文件結構規劃,二是類的命名,尤其是命名,從命名中要體現出該類的所屬文件,比如PersonController,一看就知道是一個控制器,UserModel,一看便知是模型,這樣就可以到對應的目錄下去載入該類。針對你所列出的文件結構和文件命名,顯然不符合上述規則,所以想通過__autoload實現自動載入有難度。

G. PHP設計模式之單例模式

單例模式
:使得類的一個對象成為系統中的唯一實例.
PHP中使用單例模式最常見的就是資料庫操作了。避免在系統中有多個連接資料庫的操作,浪費系統資源的現象,就可以使用單例模式。每次對資料庫操作都使用一個實例。
簡單示例
class
AClass
{
//
用來存儲自己實例
public
static
$instance;
//
私有化構造函數,防止外界實例化對象
private
function
__construct()
{}
//
私有化克隆函數,防止外界克隆對象
private
function
__clone()
{}
//
靜態方法,單例訪問統一入口
public
static
function
getInstance()
{
if
(!(self::$instance
instanceof
self)){
self::$instance
=
new
self();
}
return
self::$instance;
}
//
test
public
function
test()
{
return
"done";
}
//
私有化克隆函數,防止外界克隆對象
private
function
__clone()
{}
}
class
BClass
extends
AClass{
}
//
獲取實例
$aclass
=
AClass::getInstance();
$bclass
=
BClass::getInstance();
//
調用方法
echo
$aclass->test();
對一些比較大型的應用來說,可能連接多個資料庫,那麼不同的資料庫公用一個對象可能會產生問題,比如連接句柄的分配等,我們可以通過給$instance變成數組,通過不同的參數來控制
簡單示例
class
DB
{
//
用來存儲自己實例
public
static
$instance
=
array();
public
$conn;
//
私有化構造函數,防止外界實例化對象
private
function
__construct($host,
$username,
$password,
$dbname,
$port)
{
$this->conn
=
new
mysqli($host,
$username,
$password,
$dbname,
$port);
}
//
靜態方法,單例訪問統一入口
public
static
function
getInstance($host,
$username,
$password,
$dbname,
$port)
{
$key
=
$host.":".$port;
if
(!(self::$instance[$key]
instanceof
self)){
self::$instance[$key]
=
new
self($host,
$username,
$password,
$dbname,
$port);#實例化
}
return
self::$instance[$key];
}
//query
public
function
query($ql)
{
return
$this->conn->query($sql);
}
//
私有化克隆函數,防止外界克隆對象
private
function
__clone()
{}
//釋放資源
public
function
__destruct(){
$this->conn->close();
}

}

H. 關於PHP設計

注意 = 是賦值的意思 所以你的判斷他永遠都為true 所以都輸出了1111

== 才是判斷值是否相等

=== 是在判斷值是否相等的同時 還要類型相同的。。。

一般情況下用 ==

I. php中有哪些設計模式,舉例說明應用場景

PHP 一般有五種常見的設計模式
工廠模式
它具有創建對象的某些方法。可以使用工廠類創建對象,而不直接使用 new。
例如:
<?php
interface IUser
{
function getName();
}

class User implements IUser
{
public function __construct( $id ) { }

public function getName()
{
return "Jack";
}
}

class UserFactory
{
public static function Create( $id )
{
return new User( $id );
}
}

$uo = UserFactory::Create( 1 );
echo( $uo->getName()."\n" );
?>
另外四種是:觀察者模式,單元素模式,命令鏈模式,策略模式。例子可以網路一搜。

J. PHP設計模式的內容簡介

PHP通常被視為構建靈活和功能豐富的Web應用程序的基石。由於學習相對簡單,因此初級編程人員能夠方便地採用PHP從頭開始創建應用程序。然而,考慮到這些應用程序的規模,其維護工作令人畏懼。幸運的是,成熟的編程社區已經提供了包括設計模式在內的一些解決方案。這些針對相同問題的可重復解決方案已在其他編程語言中應用了多年。《PHP設計模式》的目標是:通過將經過實踐檢驗的設計模式應用於PHP應用程序,將PHP與早期的編程語言聯系在一起。
主要內容
◆設計模式的含義及其在PHP中的重要性
◆建立設計模式的PHP庫的常規用法
◆使用設計模式(如建造者、外觀、原型和模板模式)更快速、更有效地創建對象
◆使用數據訪問對象和代理設計模式分離體系結構
◆使用委託、工廠和單元素設計模式改善代碼流和控制
◆在不修改對象核心的情況下實現訪問者和裝飾器設計模式以增強對象
◆全面的、使用觀察者設計模式的插入式創建技術
◆使用設計模式計劃應用程序體系結構
◆使用基於設計模式的編碼方式從頭至尾地完成一個Web站點編程的案例分析
◆在已有應用程序中發現設計模式的體系結構優勢
◆通過案例分析介紹進一步增強代碼的方法

閱讀全文

與php類設計相關的資料

熱點內容
數學奇跡神奇運演算法 瀏覽:359
大廠的程序員的水平如何 瀏覽:700
遺傳演算法入門經典書籍 瀏覽:878
源碼炮台腳本 瀏覽:620
在位編輯命令 瀏覽:347
曲式分析基礎教程pdf 瀏覽:14
php生成靜態html頁面 瀏覽:964
怎麼分割pdf 瀏覽:812
壓縮垃圾報警器 瀏覽:628
小公司一般都用什麼伺服器 瀏覽:967
java獲取時間gmt時間 瀏覽:820
為什麼csgo一直連接不到伺服器 瀏覽:504
安卓登ins需要什麼 瀏覽:836
機器人演算法的難點 瀏覽:226
全自動化編程 瀏覽:726
程序員高薪限制 瀏覽:693
壓縮圖片壓縮 瀏覽:75
美國發明解壓魔方 瀏覽:302
電腦怎麼備案網上伺服器 瀏覽:515
旅行商問題Python寫法 瀏覽:952