婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PHP設計模式之解釋器(Interpreter)模式入門與應用詳解

PHP設計模式之解釋器(Interpreter)模式入門與應用詳解

熱門標簽:百應電話機器人服務 山西回撥外呼系統 河南電銷卡外呼系統哪家強 揚州地圖標注app 昭通辦理400電話 山西探意電話機器人 青島語音外呼系統招商 岳陽外呼型呼叫中心系統在哪里 騰訊外呼管理系統

本文實例講述了PHP設計模式之解釋器(Interpreter)模式。分享給大家供大家參考,具體如下:

解釋器模式,它是什么呢?

意思就是,給定一個語言, 定義它的文法的一種表示,并定義一個解釋器,該解釋器使用該表示來解釋語言中的句子,這是最實在的一種說法。

我們還可以理解為它是用于分析一個實體的關鍵元素,并且針對每個元素提供自己的解釋或相應動作。解釋器模式非常常用,比如PHP的模板引擎 就是非常常見的一種解釋器模。

咱來看一個網上找的最簡單的實例:

?php
//解釋器模式 用于分析一個實體的關鍵元素,并且針對每個元素提供自己的解釋或相應動作
//解釋器模式非常常用,比如PHP的模板引擎 就是非常常見的一種解釋器模式
class template {
 
 private $left = '!--{';
 private $right = '}-->';
 
 public function run($str) {
 return $this->init($str, $this->left, $this->right);
 }
 
 /**
 * 模板驅動-默認的驅動
 * @param string $str 模板文件數據
 * @return string
 */
 private function init($str, $left, $right) {
 $pattern = array('/'.$left.'/', '/'.$right.'/');
 $replacement = array('', '');
 return preg_replace($pattern, $replacement, $str);
 }
}
$str = "這是一個模板類,簡單的模板類,標題為:!--{Hello World}-->";
$template = new template;
echo $template->run($str);

通過上述實例,大家對于解釋器模式肯定有了自己的一個簡單理解,我們接下來就看下這個解釋器所包含的角色:

  •   環境角色:定義解釋規則的全局信息。
  •   抽象解釋器::定義了部分解釋具體實現,封裝了一些由具體解釋器實現的接口。
  •   具體解釋器(MusicNote):實現抽象解釋器的接口,進行具體的解釋執行。

完事,咱在網上看的,對于解釋器(Interpreter)模式,還有另外一種說法,那就是它包括一個具有復合類分層結構的文法表現,規則是映射到類,跟隨在文法后面的表達式可以被轉換成一個抽象的語法樹,除了復合模式的實例對象圖外,沒有別的內容。

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

但是,對于簡單的語法,解釋器添加一個規則就象添加一個類那樣容易,但解釋器沒有解決從具體表現形式到抽象語法樹的轉換,這是由其它服務完成的。

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

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

來看下參與者:

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

我們來看下《設計模式》一書針對這個模式提供的一個擴展示例,是一個網友使用數學表達式替換布爾表達式重新改造了一下,因此這個例子解決了一個數學表達式的展現,它的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... 

咱最后再分享一個實例,如下:

?php
header("Content-type:text/html;Charset=utf-8");
 
//環境角色,定義要解釋的全局內容
class Expression{
 public $content;
 function getContent(){
  return $this->content;
 }
}
 
//抽象解釋器
abstract class AbstractInterpreter{
 abstract function interpret($content);
}
 
//具體解釋器,實現抽象解釋器的抽象方法
class ChineseInterpreter extends AbstractInterpreter{
 function interpret($content){
  for($i=1;$icount($content);$i++){
   switch($content[$i]){
   case '0': echo "沒有人br>";break;
   case "1": echo "一個人br>";break;
   case "2": echo "二個人br>";break;
   case "3": echo "三個人br>";break;
   case "4": echo "四個人br>";break;
   case "5": echo "五個人br>";break;
   case "6": echo "六個人br>";break;
   case "7": echo "七個人br>";break;
   case "8": echo "八個人br>";break;
   case "9": echo "九個人br>";break;
   default:echo "其他";
   }
  }
 }
}
class EnglishInterpreter extends AbstractInterpreter{
 function interpret($content){
  for($i=1;$icount($content);$i++){
    switch($content[$i]){
    case '0': echo "This is nobodybr>";break;
    case "1": echo "This is one peoplebr>";break;
    case "2": echo "This is two peoplebr>";break;
    case "3": echo "This is three peoplebr>";break;
    case "4": echo "This is four peoplebr>";break;
    case "5": echo "This is five peoplebr>";break;
    case "6": echo "This is six peoplebr>";break;
    case "7": echo "This is seven peoplebr>";break;
    case "8": echo "This is eight peoplebr>";break;
    case "9": echo "This is nine peoplebr>";break;
    default:echo "others";
   }
  }
 }
}
 
//封裝好的對具體解釋器的調用類,非解釋器模式必須的角色
class Interpreter{
  private $interpreter;
  private $content;
  function __construct($expression){
  $this->content = $expression->getContent();
  if($this->content[0] == "Chinese"){
    $this->interpreter = new ChineseInterpreter();
   }else{
    $this->interpreter = new EnglishInterpreter();
   }
  }
  function execute(){
   $this->interpreter->interpret($this->content);
  }
}
 
//測試
$expression = new Expression();
$expression->content = array("Chinese",3,2,4,4,5);
$interpreter = new Interpreter($expression);
$interpreter->execute();
 
$expression = new Expression();
$expression->content = array("English",1,2,3,0,0);
$interpreter = new Interpreter($expression);
$interpreter->execute();
?>

結果:

三個人
二個人
四個人
四個人
五個人
This is one people
This is two people
This is three people
This is nobody
This is nobody

好啦,本次記錄就到這里了。

更多關于PHP相關內容感興趣的讀者可查看本站專題:《php面向對象程序設計入門教程》、《PHP數組(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算符用法總結》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

希望本文所述對大家PHP程序設計有所幫助。

您可能感興趣的文章:
  • php設計模式 Builder(建造者模式)
  • 學習php設計模式 php實現建造者模式
  • PHP設計模式之建造者模式定義與用法簡單示例
  • PHP設計模式之適配器模式(Adapter)原理與用法詳解
  • PHP設計模式之策略模式(Strategy)入門與應用案例詳解
  • PHP設計模式之單例模式入門與應用詳解
  • PHP設計模式之觀察者模式入門與應用案例詳解
  • PHP設計模式之中介者模式(Mediator Pattern)入門與應用案例詳解
  • PHP設計模式之迭代器(Iterator)模式入門與應用詳解
  • PHP設計模式之觀察者模式(Observer)詳細介紹和代碼實例
  • PHP經典面試題之設計模式(經常遇到)
  • PHP設計模式之建造者模式(Builder)原理與用法案例詳解

標簽:湛江 宜賓 銅川 黃南 鎮江 寶雞 南陽 婁底

巨人網絡通訊聲明:本文標題《PHP設計模式之解釋器(Interpreter)模式入門與應用詳解》,本文關鍵詞  PHP,設計模式,之,解釋器,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP設計模式之解釋器(Interpreter)模式入門與應用詳解》相關的同類信息!
  • 本頁收集關于PHP設計模式之解釋器(Interpreter)模式入門與應用詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产精品每日更新在线播放网址| 国产精品电影一区二区| 欧美精品一区二区久久久| 五月综合激情婷婷六月色窝| 欧美猛男男办公室激情| 麻豆免费精品视频| 精品国产百合女同互慰| 粉嫩欧美一区二区三区高清影视| 中文字幕电影一区| 欧美体内she精高潮| 麻豆成人综合网| 欧美激情综合在线| 在线一区二区三区做爰视频网站| 舔着乳尖日韩一区| 国产亚洲欧美激情| 欧美午夜电影网| 精品一区二区精品| 亚洲三级久久久| 日韩免费看网站| 99在线精品视频| 亚洲成人黄色影院| 久久精品人人做人人爽人人| 日本韩国视频一区二区| 蜜桃在线一区二区三区| 中文字幕一区二区三区在线观看| 欧美日韩一级片在线观看| 国产精品影视在线观看| 亚洲视频狠狠干| 欧美精品在线观看播放| 成人小视频免费观看| 石原莉奈一区二区三区在线观看| 国产喷白浆一区二区三区| 欧美日韩免费观看一区二区三区| 美女视频黄a大片欧美| 亚洲精品中文字幕乱码三区| 久久理论电影网| 日韩午夜在线播放| 在线观看视频91| 国产精品一色哟哟哟| 青娱乐精品在线视频| 亚洲图片激情小说| 久久精品一区八戒影视| 欧美一区二区成人| 色猫猫国产区一区二在线视频| 国产一区二区在线观看视频| 青青国产91久久久久久| 亚洲一区二区三区在线播放| 国产欧美日本一区视频| 日韩视频在线你懂得| 欧美日免费三级在线| 日本道免费精品一区二区三区| 成人性生交大片免费看中文网站| 黑人巨大精品欧美一区| 久久激五月天综合精品| 日本欧美一区二区在线观看| 亚洲成人综合在线| 一区二区日韩av| 亚洲精品久久嫩草网站秘色| 亚洲色图制服丝袜| 日本一区二区成人| 日本一区二区三区在线观看| 国产婷婷一区二区| 久久男人中文字幕资源站| 久久久青草青青国产亚洲免观| 亚洲精品在线观看网站| 日韩欧美区一区二| 久久色在线观看| 成人免费小视频| 亚洲欧美色一区| 亚洲成人精品在线观看| 日韩av电影天堂| 国产在线精品一区二区三区不卡| 韩国v欧美v日本v亚洲v| 国产精品夜夜嗨| 91理论电影在线观看| 在线一区二区三区做爰视频网站| 91福利精品视频| 在线电影院国产精品| 制服丝袜在线91| 久久久久国产精品麻豆| 中文字幕永久在线不卡| 午夜久久久久久| 久久99国产精品久久| 在线观看www91| 欧美色视频在线观看| 久久日一线二线三线suv| 亚洲少妇中出一区| 久久国产三级精品| 色综合天天综合色综合av| 91精品免费在线| 国产喷白浆一区二区三区| 亚洲主播在线播放| 国产剧情一区二区| 欧美制服丝袜第一页| 久久综合九色综合欧美98 | 日本道精品一区二区三区 | 久久精品亚洲一区二区三区浴池| 成人欧美一区二区三区黑人麻豆 | 欧美日韩亚洲另类| 久久亚洲综合色一区二区三区| 国产精品不卡在线观看| 日韩高清中文字幕一区| eeuss鲁片一区二区三区| 欧美精品国产精品| 亚洲精品成人悠悠色影视| 国产一区二区三区不卡在线观看 | 中文字幕一区二区三区不卡在线| 五月天国产精品| www.亚洲在线| 久久久夜色精品亚洲| 午夜久久电影网| 色哟哟亚洲精品| 久久久精品tv| 精彩视频一区二区| 日韩一区二区精品在线观看| 亚洲精品中文在线影院| 成人av免费在线播放| 26uuuu精品一区二区| 亚洲福利视频一区| 99久久国产综合色|国产精品| 久久久亚洲高清| 国产一区二区三区免费看| 日韩美女视频在线| 免费xxxx性欧美18vr| 555夜色666亚洲国产免| 午夜精品成人在线视频| 欧洲精品在线观看| 亚洲精品水蜜桃| 色综合久久88色综合天天6| 国产精品天美传媒沈樵| 国产成人自拍高清视频在线免费播放| 欧美久久高跟鞋激| 日本女人一区二区三区| 69av一区二区三区| 天堂一区二区在线| 日韩欧美一二三| 黄色日韩网站视频| 久久人人97超碰com| 韩国视频一区二区| 福利电影一区二区| 国产亚洲精品7777| 成人一区二区三区视频| 日韩美女视频一区二区| 91丨九色porny丨蝌蚪| 亚洲图片欧美一区| 欧美一区二区三区在线观看视频| 欧美aaaaaa午夜精品| 欧美一区二区女人| 国产一区二区视频在线| 国产偷国产偷亚洲高清人白洁| 国产精品12区| 亚洲六月丁香色婷婷综合久久| 久久国产精品色婷婷| 国产在线精品国自产拍免费| 日韩一区和二区| 奇米精品一区二区三区在线观看一| 欧美日韩精品一区二区天天拍小说 | 成人看片黄a免费看在线| 欧美性xxxxxx少妇| 午夜在线电影亚洲一区| 91黄色免费版| 国产精品成人在线观看 | 精久久久久久久久久久| 国产人成一区二区三区影院| 福利一区二区在线| 一区二区国产视频| 日韩视频永久免费| 国产a久久麻豆| 亚洲欧美日韩中文字幕一区二区三区| 欧美在线观看视频在线| 香蕉加勒比综合久久| 日韩一区二区电影在线| 日本不卡视频在线| 26uuu国产一区二区三区| eeuss鲁片一区二区三区在线观看| 一区二区三区在线免费视频| 日韩精品一区二区三区老鸭窝| 粗大黑人巨茎大战欧美成人| 午夜a成v人精品| 久久久久久夜精品精品免费| 91麻豆国产精品久久| 奇米色一区二区三区四区| 18涩涩午夜精品.www| 精品久久久久久久人人人人传媒| 91美女蜜桃在线| 丝袜美腿一区二区三区| 久久久精品日韩欧美| 欧美区视频在线观看| 99综合影院在线| 国产一区二区三区美女| 亚洲国产精品视频| 亚洲视频一二三区| 国产目拍亚洲精品99久久精品| 日韩视频免费观看高清在线视频| 成人午夜激情影院| 开心九九激情九九欧美日韩精美视频电影 | 亚洲人成影院在线观看| 26uuu亚洲| 欧美一级一级性生活免费录像| 日本黄色一区二区|