bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

php數據庫函數設計模式 php創建數據庫代碼

PHP設計模式有哪些

1.工廠模式

成都創新互聯公司堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網站制作、網站建設、外貿網站建設、企業官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的清鎮網站設計、移動媒體設計的需求,幫助企業找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!

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

2.單元素模式

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

3.觀察者模式

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

4.命令鏈模式

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

5.策略模式

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

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 );

?

php設計模式介紹之迭代器模式

《PHP設計模式介紹》第八章 迭代器模式

類中的面向對象編程封裝應用邏輯 類 就是實例化的對象 每個單獨的對象都有一個特定的身份和狀態 單獨的對象是一種組織代碼的有用方法 但通常你會處理一組對象或者集合

屬性來自 SQL 查詢的一組數據就是一個集合 就像本書前面章節介紹的 Monopoly 游戲示例的對象列表

集合不一定是均一的 圖形用戶界面框架中的 Window 對象可以收集任意數量的控制對象 - Menu Slider 和 Button 并且 集合的實現可以有多種方式 PHP 數字是一個集合 但也是一個散列表 一個鏈接列表 一個堆棧以及隊列

問題

如何操縱任意的對象集合?

解決方案

使用迭代器模式來提供對集合內容的統一存取

你可能沒有意識到這一點 但你每天都在使用迭代器模式 - 它潛藏在 PHP 的數組類型和各種數組操作函數中 (其實 給你一些固有類的數組的組合和一群用這些固有類工作的可變函數 你將不得不使用這些數組來處理對象集合 這是在 PHP 中的本地數組迭代

$test? =? array( one ? o ? three );$output? =? ; reset($test); do? {$output? =? current($test);}? while? (next($test));echo? $output;? //? produces? oneothree

reset() 函數將迭代重新轉到數組的開始 current() 返回當前元素的值 next() 則前進至數組中的下一個元素并返回新的 current() 值 當你超出數組的最后一個元素時 next() 返回 false 使用這些迭代方法 PHP 數組的內部實現就與你不相關了 迭代器結合了封裝和多態的面向對象程序設計原理 使用迭代器 你可以對集合中的對象進行操作 而無需專門了解集合如何顯現或者集合包含什么(對象的種類) 迭代器提供了不同固定迭代實現的統一接口 它完全包含了如何操縱特定集合的詳細信息 包括顯示哪些項(過濾)及其顯示順序(排序)

讓我們創建一個簡單的對象 在數組中對它進行操作 (盡管該示例在 PHP 環境下 但迭代器并不特定于 PHP 雖然添加了較多的引用操作符 本章節中的大多數示例在 PHP 下也能夠運行) 對象 Lendable 表示諸如電影 相冊等媒體 它作為 Web 站點的一部分或服務 允許用戶瀏覽或將他們的媒體集合分享給其他用戶 (對??????? 于該示例 請無需考慮其他方面 )讓我們開始下面對 Lendable 基礎設計的測試

//? PHP class? LendableTestCase? extends? UnitTestCase? {function? TestCheckout()? {$item? =? new? Lendable;$this assertFalse($item borrower);$item checkout( John );$this assertEqual( borrowed ? $item status);$this assertEqual( John ? $item borrower);}function? TestCheckin()? {$item? =? new? Lendable;$item checkout( John );$item checkin();$this assertEqual( library ? $item status);$this assertFalse($item borrower);}}

要實現這一最初測試的需求 我們來創建一個帶有若干公共屬性和一些方法的類 來觸發這些屬性的值

class? Lendable? {public? $status? =? library ;public? $borrower? =? ;public? function? checkout($borrower)? {$this status? =? borrowed ;$this borrower? =? $borrower;}public? function? checkin()? {$this status? =? library ;$this borrower? =? ;}}

Lendable 是一個好的 普通的開端 讓我們將它擴展到諸如 DVD 或 CD 的磁道項 媒體擴展了 Lendable 并且磁道詳細記錄了特定媒體的詳細信息 包括項目的名稱 發布的年份以及項本身的類型

class? Media? extends? Lendable? {public? $name; public? $type; public? $year;public? function? __construct($name ? $year ? $type= dvd )? {$this name? =? $name;$this type? =? $type;$this year? =? (int)$year;}}

要使事情更加簡單 媒體有三個公共的實例變量 Media::name Media::year 和Media::type 構造函數采用了兩個參數 將第一個存儲在 $name 中 第二個存儲在 $year 中 構造函數還允許可選的第三個參數來指定類型(缺省為dvd)

給定單獨的對象來操作 你現在可以創建一個容器來包含他們 Library 類似于常用的庫 Library 應該能夠添加 刪除和計算集合中的項 甚至 Library 還應該允許訪問集合(本章中的樣本代碼部分可看到示例)中的單一的項(對象)

我們開始構建 Library 的測試用例

class? LibraryTestCase? extends? UnitTestCase? {function? TestCount()? {$lib? =? new? Library;$this assertEqual( ? $lib count());}}

它是滿足這一測試的簡單類

class? Library? {function? count()? {return? ;}}

繼續將一些有趣的功能添加到測試中

class? LibraryTestCase? extends? UnitTestCase? {function? TestCount()? {? /*? ? */? }function? TestAdd()? {$lib? =? new? Library;$lib add( one );$this assertEqual( ? $lib count());}}

實現 add() 的簡單方法是建立在 PHP 靈活數組函數的基礎上 你可以將項添加到實例變量并使用 count() 來返回集合眾項的數量

class? Library? {protected? $collection? =? array();function? count()? {return? count($this collection);}function? add($item)? {$this collection[]? =? $item;}}

lishixinzhi/Article/program/net/201311/13092

當前標題:php數據庫函數設計模式 php創建數據庫代碼
網站URL:http://vcdvsql.cn/article4/dopgdoe.html

成都網站建設公司_創新互聯,為您提供云服務器、動態網站、服務器托管、網頁設計公司、域名注冊

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都做網站