亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > 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)模式入門與應用詳解的相關信息資訊供網民參考!
  • 推薦文章
    精品国产三级a∨在线观看| 日韩av东京社区男人的天堂| 韩国三级一区| 日本乱中文字幕系列| 成人a大片在线观看| 成人免费一级纶理片| 欧美a级成人淫片免费看| a级毛片免费观看网站| 国产亚洲免费观看| 国产高清视频免费| 国产精品免费久久| 国产视频一区二区在线播放| 日韩在线观看免费| 九九久久国产精品| 黄色免费三级| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 中文字幕97| 国产极品精频在线观看| 欧美另类videosbestsex| 国产麻豆精品免费密入口| 欧美激情一区二区三区在线| 成人免费观看的视频黄页| 九九免费精品视频| 黄视频网站免费| 国产综合91天堂亚洲国产| 久草免费在线色站| 高清一级做a爱过程不卡视频| 欧美激情影院| 精品在线观看国产| 成人av在线播放| 香蕉视频久久| 国产精品1024永久免费视频| 免费一级片网站| 国产麻豆精品高清在线播放| 99久久精品国产高清一区二区 | 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 久久99青青久久99久久| 国产麻豆精品hdvideoss| 国产极品白嫩美女在线观看看| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 欧美a免费| 尤物视频网站在线| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 久草免费资源| 国产视频一区二区在线播放| 精品视频在线观看一区二区三区| 国产一级生活片| 色综合久久天天综合| 沈樵在线观看福利| 青青久热| 国产高清视频免费观看| 毛片高清| 色综合久久天天综线观看| 免费国产在线观看| 99色视频在线| 四虎久久精品国产| 麻豆午夜视频| 久久久久久久免费视频| 国产精品自拍在线| 韩国三级香港三级日本三级la| 韩国三级视频在线观看| 香蕉视频久久| 国产91精品系列在线观看| 一a一级片| 久久成人性色生活片| 欧美a级成人淫片免费看| 免费国产在线观看| 亚久久伊人精品青青草原2020| 久久99青青久久99久久| 日韩欧美一及在线播放| 日日日夜夜操| 国产综合91天堂亚洲国产| 免费一级片在线观看| 国产不卡福利| 日本免费看视频| 四虎影视精品永久免费网站| 久草免费资源| 日本在线不卡视频| 午夜家庭影院| 精品国产亚洲人成在线| 国产成人精品影视| 亚飞与亚基在线观看| 日韩专区一区| 高清一级做a爱过程不卡视频| 欧美激情一区二区三区视频| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 欧美激情一区二区三区视频| 精品视频在线看 | 久久国产一区二区| 国产美女在线观看| 美女免费精品高清毛片在线视| 欧美国产日韩一区二区三区| 精品国产亚洲人成在线| 国产成人女人在线视频观看| 国产一区二区精品久久91| 国产视频网站在线观看| 日韩中文字幕在线亚洲一区| 高清一级做a爱过程不卡视频| 国产伦久视频免费观看 视频| 国产高清视频免费| 久久成人性色生活片| 美女免费精品高清毛片在线视| 你懂的福利视频| 国产视频在线免费观看| 亚洲第一页乱| 国产韩国精品一区二区三区| 日日日夜夜操| 国产a网| 久久精品免视看国产明星| 国产伦久视频免费观看 视频 | 青青青草视频在线观看| 你懂的日韩| 天天色色色| 青草国产在线| 久久精品人人做人人爽97| 中文字幕一区二区三区精彩视频 | 国产福利免费观看| 韩国毛片免费| 国产一区二区精品| 中文字幕一区二区三区 精品| 精品国产一区二区三区精东影业| 国产网站免费| 日韩中文字幕一区| 久久精品店| 91麻豆精品国产自产在线观看一区| 成人av在线播放| 国产视频久久久| 国产一级强片在线观看| 91麻豆国产福利精品| 成人影院一区二区三区| 99色视频在线观看| 青青久在线视频| 在线观看导航| 成人免费观看男女羞羞视频| 国产极品精频在线观看| 国产成a人片在线观看视频| 国产综合91天堂亚洲国产| 精品视频在线看| 免费国产在线观看| 欧美激情中文字幕一区二区| 成人免费一级纶理片| 国产伦理精品| 久久精品大片| 精品视频在线观看一区二区| 成人高清免费| 成人高清视频在线观看| 国产亚洲免费观看| 国产成人啪精品视频免费软件| 天天做日日爱夜夜爽| 欧美激情在线精品video| 久久久久久久免费视频| 欧美a级大片| 久久国产精品自由自在| 欧美另类videosbestsex视频| 成人高清视频在线观看| 精品久久久久久综合网| 日韩av片免费播放| 日本特黄特色aa大片免费| 日韩字幕在线| 国产高清在线精品一区a| 免费国产在线观看| 99久久精品国产片| 成人免费观看网欧美片| 精品在线观看国产| 精品视频一区二区三区| 免费一级片在线观看| 国产高清在线精品一区二区| 中文字幕一区二区三区 精品| 亚洲第一页乱| 亚洲第一视频在线播放| 欧美另类videosbestsex久久| 国产一区二区精品久久91| 美女免费毛片| 日本在线www| 一级毛片视频免费| 韩国三级视频网站| 一级女人毛片人一女人| 尤物视频网站在线观看| 九九免费高清在线观看视频| 99热热久久| 久久福利影视| 麻豆午夜视频| 国产一区二区精品在线观看| 色综合久久天天综合| 成人高清视频免费观看| 91麻豆精品国产自产在线| 国产国语对白一级毛片| 韩国三级香港三级日本三级| 欧美国产日韩精品| 精品久久久久久综合网| 韩国三级一区| 九九干| 毛片成人永久免费视频| 国产极品精频在线观看| 99久久精品国产国产毛片| 精品视频在线看 | 久久99中文字幕| 国产一区二区精品久久91| 91麻豆tv| 99色视频在线|