可锐资源网

技术资源分享平台,提供编程学习、网站建设、脚本开发教程

PHP设计模式之解释器模式

解释器模式属于行为型模式

概述:给定一种语言,定义他的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子

解释器模式的优缺点:

解释器是一个简单的语法分析工具,它最显著的优点就是扩展性,修改语法规则只需要修改相应的非终结符就可以了,若扩展语法,只需要增加非终结符类就可以了。 但是,解释器模式会引起类的膨胀,每个语法都需要产生一个非终结符表达式,语法规则比较复杂时,就可能产生大量的类文件,为维护带来非常多的麻烦。同时,由于采用递归调用方法,每个非终结符表达式只关心与自己相关的表达式,每个表达式需要知道最终的结果,必须通过递归方式,无论是面向对象的语言还是面向过程的语言,递归都是一个不推荐的方式。由于使用了大量的循环和递归,效率是一个不容忽视的问题。特别是用于解释一个解析复杂、冗长的语法时,效率是难以忍受的。

<?php

class Expression

{

function interpreter($str)

{

return $str;

}

}

<?php

class ExpressionNum extends Expression

{

function interpreter($str)

{

switch($str)

{

case "0": return "零";

case "1": return "一";

case "2": return "二";

case "3": return "三";

case "4": return "四";

case "5": return "五";

case "6": return "六";

case "7": return "七";

case "8": return "八";

case "9": return "九";

}

}

}

<?php

class ExpressionCharater extends Expression

{

function interpreter($str)

{

return strtoupper($str);

}

}

<?php

class Interpreter

{

function execute($string)

{

$expression = null;

for($i = 0;$i<strlen($string);$i++) {

$temp = $string[$i];

switch(true)

{

case is_numeric($temp): $expression = new ExpressionNum(); break;

default: $expression = new ExpressionCharater(); break;

}

echo $expression->interpreter($temp);

}

}

}

<?php

/**

*解释器模式

*/

public function actionExpression(){

Yii::import('ext.expression.*');

$obj = new Interpreter();

$obj->execute("12345abc");

}

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言