最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP設(shè)計(jì)模式之解釋器模式的深入解析

 更新時(shí)間:2013年06月13日 15:53:57   作者:  
本篇文章是對(duì)PHP設(shè)計(jì)模式中的解釋器模式進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下

解釋器(Interpreter)模式,它包括一個(gè)具有復(fù)合類(lèi)分層結(jié)構(gòu)的文法表現(xiàn),規(guī)則是映射到類(lèi),跟隨在文法后面的表達(dá)式可以被轉(zhuǎn)換成一個(gè)抽象的語(yǔ)法樹(shù),除了復(fù)合模式的實(shí)例對(duì)象圖外,沒(méi)有別的內(nèi)容。

樹(shù)是一個(gè)抽象的名詞,因?yàn)閷?shí)際上大多數(shù)時(shí)候它是一個(gè)表達(dá)式的抽象表現(xiàn),它忽略了可能有一個(gè)字符串,也可能有一個(gè)數(shù)據(jù)結(jié)構(gòu)的具體表達(dá)式,(例如,在PHP中,“A”和“\x41”是相同抽象字面值的不同具體表現(xiàn)),通過(guò)邏輯規(guī)則解耦結(jié)果,使解釋過(guò)程大大簡(jiǎn)化。

解釋器不是一個(gè)很常見(jiàn)的模式,但對(duì)于簡(jiǎn)單的語(yǔ)法,它添加一個(gè)規(guī)則就象添加一個(gè)類(lèi)那樣容易,但它沒(méi)有解決從具體表現(xiàn)形式到抽象語(yǔ)法樹(shù)的轉(zhuǎn)換,這是由其它服務(wù)完成的。

解釋器模式旨在為一個(gè)簡(jiǎn)單的抽象表達(dá)式(AbstractExpression)方法(解釋器操作)實(shí)現(xiàn)利用復(fù)合分層結(jié)構(gòu),解釋器操作的參數(shù)通常統(tǒng)稱為上下文,對(duì)于給定的一個(gè)方法,它們通常被計(jì)算值代替,或它們對(duì)某些操作可能不存在。

同樣,當(dāng)包含一個(gè)解釋器時(shí),復(fù)合模式的葉子和容器參與者名稱會(huì)不一樣,這些名稱反映了它們所扮演的角色:終結(jié)符(terminal)或非終結(jié)符(nonterminal)表達(dá)式。

參與者:
◆客戶端(Client):使用解釋操作。
◆抽象表達(dá)式(AbstractExpression):基于一個(gè)表達(dá)式樹(shù)抽象。
◆非終結(jié)符表達(dá)式(NonTerminalExpression):遞歸地包含其它抽象表達(dá)式(AbstractExpression實(shí)例)的表達(dá)式。
◆終結(jié)符表達(dá)式(TerminalExpression):不能夠進(jìn)一步簡(jiǎn)化的表達(dá)式。


《設(shè)計(jì)模式》一書(shū)針對(duì)這個(gè)模式提供了一個(gè)擴(kuò)展示例,我將使用數(shù)學(xué)表達(dá)式替換布爾表達(dá)式重新改造了一下,因此這個(gè)例子解決了一個(gè)數(shù)學(xué)表達(dá)式的展現(xiàn),它的evaluate( )被分離在一個(gè)不同的ConcreteExpression類(lèi)中。

復(fù)制代碼 代碼如下:

/** 
 * AbstractExpression. All implementations of this interface 
 * are ConcreteExpressions. 
 */
interface MathExpression 

    /** 
     * Calculates the value assumed by the expression. 
     * Note that $values is passed to all expression but it 
     * is used by Variable only. This is required to abstract 
     * away the tree structure. 
     */
    public function evaluate(array $values); 


/** 
 * A terminal expression which is a literal value. 
 */
class Literal implements MathExpression 

    private $_value; 

    public function __construct($value) 
    { 
        $this->_value = $value; 
    } 

    public function evaluate(array $values) 
    { 
        return $this->_value; 
    } 


/** 
 * A terminal expression which represents a variable. 
 */
class Variable implements MathExpression 

    private $_letter; 

    public function __construct($letter) 
    { 
        $this->_letter = $letter; 
    } 

    public function evaluate(array $values) 
    { 
        return $values[$this->_letter]; 
    } 


/** 
 * Nonterminal expression. 
 */
class Sum implements MathExpression 

    private $_a; 
    private $_b; 

    public function __construct(MathExpression $a, MathExpression $b) 
    { 
        $this->_a = $a; 
        $this->_b = $b; 
    } 

    public function evaluate(array $values) 
    { 
        return $this->_a->evaluate($values) + $this->_b->evaluate($values); 
    } 


/** 
 * Nonterminal expression. 
 */
class Product implements MathExpression 

    private $_a; 
    private $_b; 

    public function __construct(MathExpression $a, MathExpression $b) 
    { 
        $this->_a = $a; 
        $this->_b = $b; 
    } 

    public function evaluate(array $values) 
    { 
        return $this->_a->evaluate($values) * $this->_b->evaluate($values); 
    } 


// 10(a + 3) 
$expression = new Product(new Literal(10), new Sum(new Variable('a'), new Literal(3))); 
echo $expression->evaluate(array('a' => 4)), "\n"; 
// adding new rules to the grammar is easy: 
// e.g. Power, Subtraction... 
// thanks to the Composite, manipulation is even simpler: 
// we could add substitute($letter, MathExpression $expr) 
// to the interface...

相關(guān)文章

  • Laravel 5.3 學(xué)習(xí)筆記之 錯(cuò)誤&日志

    Laravel 5.3 學(xué)習(xí)筆記之 錯(cuò)誤&日志

    這篇文章主要介紹了Laravel 5.3 學(xué)習(xí)筆記之 錯(cuò)誤&日志的相關(guān)資料,需要的朋友可以參考下
    2016-08-08
  • PHP實(shí)現(xiàn)簡(jiǎn)單的模板引擎功能示例

    PHP實(shí)現(xiàn)簡(jiǎn)單的模板引擎功能示例

    這篇文章主要介紹了PHP實(shí)現(xiàn)簡(jiǎn)單的模板引擎功能,結(jié)合實(shí)例形式詳細(xì)分析了PHP實(shí)現(xiàn)模板引擎功能的模版類(lèi)、編譯類(lèi)、控制器類(lèi)及模板文件等實(shí)現(xiàn)方法與相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • PHP判斷一個(gè)字符串是否是回文字符串的方法

    PHP判斷一個(gè)字符串是否是回文字符串的方法

    這篇文章主要介紹了PHP判斷一個(gè)字符串是否是回文字符串的方法,實(shí)例分析了php操作字符串判斷回文的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • php5.5使用PHPMailer-5.2發(fā)送郵件的完整步驟

    php5.5使用PHPMailer-5.2發(fā)送郵件的完整步驟

    PHPMailer已經(jīng)更新了很多版本了,本教程只針對(duì)老版本。下面這篇文章主要給大家介紹了關(guān)于php5.5使用PHPMailer-5.2發(fā)送郵件的完整步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • apache中為php 設(shè)置虛擬目錄

    apache中為php 設(shè)置虛擬目錄

    這篇文章主要介紹了apache中為php 設(shè)置虛擬目錄,需要的朋友可以參考下
    2014-12-12
  • php輕松實(shí)現(xiàn)中英文混排字符串截取

    php輕松實(shí)現(xiàn)中英文混排字符串截取

    提到中英文混排計(jì)數(shù)、截取,大家首先想到的是自己寫(xiě)個(gè)截取函數(shù),這在之前的文章中我也提到過(guò),今天我給大家分享的是php的mb擴(kuò)展,教你如何使用原生態(tài)的php函數(shù)輕松處理字符串。
    2014-05-05
  • PHP實(shí)現(xiàn)的服務(wù)器一致性hash分布算法示例

    PHP實(shí)現(xiàn)的服務(wù)器一致性hash分布算法示例

    這篇文章主要介紹了PHP實(shí)現(xiàn)的服務(wù)器一致性hash分布算法,結(jié)合實(shí)例形式分析了php一致性hash分布算法類(lèi)的具體定義與相關(guān)使用技巧,需要的朋友可以參考下
    2018-08-08
  • php修改指定文件后綴的方法

    php修改指定文件后綴的方法

    這篇文章主要介紹了php修改指定文件后綴的方法,文中的函數(shù)foreachDir可實(shí)現(xiàn)文件目錄的檢測(cè)、讀取、打開(kāi)及文件后綴替換等功能,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-09-09
  • PHP 七大優(yōu)勢(shì)分析

    PHP 七大優(yōu)勢(shì)分析

    ASP是微軟公司實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁(yè)的一種技術(shù)。ASP支持一些腳本語(yǔ)言,主要以VBScripp為主。與ASP相比較,你還可以選擇另一中開(kāi)放源代碼編程語(yǔ)言——PHP,PHP可以運(yùn)行在多種操作系統(tǒng)下,其中包括Linux和windows。
    2009-06-06
  • PHP時(shí)間日期增減操作示例【date strtotime實(shí)現(xiàn)加一天、加一月等操作】

    PHP時(shí)間日期增減操作示例【date strtotime實(shí)現(xiàn)加一天、加一月等操作】

    這篇文章主要介紹了PHP時(shí)間日期增減操作,結(jié)合實(shí)例形式分析了php使用date、strtotime等函數(shù)實(shí)現(xiàn)加一天、加一月等運(yùn)算相關(guān)實(shí)現(xiàn)技巧與問(wèn)題解決方法,需要的朋友可以參考下
    2018-12-12

最新評(píng)論

文昌市| 阿坝县| 荥经县| 青田县| 怀化市| 平罗县| 建昌县| 莒南县| 广水市| 云霄县| 齐河县| 缙云县| 呼伦贝尔市| 云梦县| 安徽省| 四平市| 彰化县| 东光县| 晋城| 临城县| 永登县| 玛纳斯县| 金山区| 泽库县| 墨竹工卡县| 澄迈县| 阳泉市| 平果县| 北宁市| 台江县| 广饶县| 平阳县| 吉木乃县| 建始县| 翁牛特旗| 牟定县| 德兴市| 历史| 梁平县| 通化县| 卢氏县|