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

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

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

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

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

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

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

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

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


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

復制代碼 代碼如下:

/** 
 * 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 學習筆記之 錯誤&日志

    Laravel 5.3 學習筆記之 錯誤&日志

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

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

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

    PHP判斷一個字符串是否是回文字符串的方法

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評論

平遥县| 九龙县| 贵溪市| 汉阴县| 图们市| 诸城市| 高州市| 商丘市| 浦东新区| 昌邑市| 娄底市| 亳州市| 武城县| 安图县| 朝阳区| 西充县| 濮阳县| 沾化县| 宽城| 吉木乃县| 佛坪县| 淮南市| 南投市| 镇雄县| 沅江市| 岑溪市| 乾安县| 亚东县| 游戏| 奇台县| 会同县| 临夏市| 日照市| 永德县| 阳高县| 高州市| 名山县| 龙泉市| 德格县| 高雄市| 庄河市|