解释器设计模式用于分析一个实体的关键元素,并且针对每个元素都提供自己的解释或相应的动作。

<?php
/**
* 解释器模式
*/
class User
{
protected $_username; public function __construct($username)
{
$this->_username = $username;
} public function getProfilePage()
{
$profile = "<h2>I like never again</h2>";
$profile .= "I love all of the songs, My favorite CD:<br/>";
$profile .= "{{myCD.getTitle}}<br/>";
$profile .= "My name is ";
$profile .= "{{myCD.getName}}"; return $profile;
}
} /**
*ad
*/
class userCD
{
protected $_user = NULL;
public function setUser($user)
{
$this->_user = $user;
} public function getTitle()
{
return 'test';
} public function getName()
{
return '111';
}
}
/**
* interpreter
*/
class userCDInterpreter
{
protected $_user = NULL;
function setUser($user)
{
$this->_user = $user;
} public function getInterpreted()
{
$profile = $this->_user->getProfilePage();
if (preg_match_all('/\{\{myCD\.(.*?)\}\}/', $profile, $triggers, PREG_SET_ORDER)) {
$replacements = array(); foreach ($triggers as $trigger) {
$replacements[] = $trigger[1];
}
$replacements = array_unique($replacements); $myCD = new userCD();
$myCD->setUser($this->_user); foreach ($replacements as $replacement) {
$profile = str_replace("{{myCD.{$replacement}}}", call_user_func(array($myCD, $replacement)), $profile);
}
} return $profile;
}
}
$username = 'aaron';
$user = new User($username);
$interpreter = new userCDInterpreter();
$interpreter->setUser($user);
$echo = $interpreter->getInterpreted(); print "<h1>{$username}'s Profile</h1>"; print $echo;

php设计模式之解释器模式的更多相关文章

  1. 乐在其中设计模式(C#) - 解释器模式(Interpreter Pattern)

    原文:乐在其中设计模式(C#) - 解释器模式(Interpreter Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 解释器模式(Interpreter Pattern) 作 ...

  2. C#设计模式:解释器模式(Interpreter Pattern)

    一,C#设计模式:解释器模式(Interpreter Pattern) 1,解释器模式的应用场合是Interpreter模式应用中的难点,只有满足“业务规则频繁变化,且类似的模式不断重复出现,并且容易 ...

  3. 北风设计模式课程---解释器模式(Interpreter Pattern)

    北风设计模式课程---解释器模式(Interpreter Pattern) 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 设计模式都是对生活的抽象,比如用 ...

  4. python设计模式之解释器模式

    python设计模式之解释器模式 对每个应用来说,至少有以下两种不同的用户分类. [ ] 基本用户:这类用户只希望能够凭直觉使用应用.他们不喜欢花太多时间配置或学习应用的内部.对他们来说,基本的用法就 ...

  5. 【GOF23设计模式】解释器模式 & 访问者模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]_解释器模式.访问者模式.数学表达式动态解析库式 1.解释器模式Interpreter  2.访问者模式Visitor 

  6. [设计模式] 15 解释器模式 Interpreter

    在GOF的<设计模式:可复用面向对象软件的基础>一书中对解释器模式是这样说的:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子.如果一种特定类 ...

  7. 再起航,我的学习笔记之JavaScript设计模式26(解释器模式)

    解释器模式 概念介绍 解释器模式(Interpreter):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 获取元素在页面中的路径 我们都知道获取一个 ...

  8. Head First设计模式之解释器模式

    一.定义 给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子. 主要解决:对于一些固定文法构建一个解释句子的解释器. 何时使用:如果一种特定类型的问题发生的频率足 ...

  9. 【Unity与23种设计模式】解释器模式(Interpreter)

    GoF中定义: "定义一个程序设计语言所需要的语句,并提供解释来解析(执行)该语言." 传统上,执行程序代码通常通过两种方式 第一种:编译程序 第二种:解释器 常见的使用解释器的程 ...

  10. 折腾Java设计模式之解释器模式

    解释器模式 解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器.客户端可以使用这个解释器来解释这个语言中的句子. 意图 给定一个语言,定义它的文法表 ...

随机推荐

  1. Qt-Creator 加入qwt库

    qwt是基于Qt的开源图表库 从官网下载qwt的源码 http://sourceforge.jp/projects/sfnet_qwt/downloads/qwt/6.1.0/qwt-6.1.0.ta ...

  2. [bzoj] 3343 教主的魔法 || 带修改分块

    原题 长度为n的序列,有两种操作: 1.[l,r]区间每个数+w 2.询问[l,r]区间有多少个数>c 记录lazy数组即可. #include<cstdio> #include&l ...

  3. 设置(settings)

    设置(settings) 题目描述 如题所示,这将是一个关于设置的问题. 你需要通过对一个控制台进行设置,来得到不同的效果. 这个控制台由n个控制元件组成,每个元件有m种设置,其中i号元件的第j种设置 ...

  4. 情报传递(message)

    情报传递(message) 题目描述 奈特公司是一个巨大的情报公司,它有着庞大的情报网络,情报网络中共有n名情报员.每名情报员可能有若干名(可能没有)下线,除1名大头目外其余n-1名情报员有且仅有1名 ...

  5. jQuery 鼠标滚轮事件

    使用插件 jquery-mousewheel 下载 $('body').mousewheel(function(event, delta) { ? 'Up' : 'Down'; if (dir == ...

  6. Linux下的ACL

    ACL理论概述 9位的属主/属组/其他人访问控制系统已经得到证明是强大的,足以满足大多数管理方面的需求. 事实上,在所有非UNIX操作系统上都采用了一种实质上更为复杂的方式来管理对于文件的访问:访问控 ...

  7. react dva routerRedux 备忘

    首先你需要import { Link, routerRedux } from 'dva/router'; 在方法里跳转用 function applyJobHandler(){ dispatch(ro ...

  8. gdb 记录临时变量

    gdb ./pgm set logging file log set logging on ... set logging off gdb ./pgm | tee -a log ... file a. ...

  9. YYH的王国(NOIP模拟赛Round 6)

    题目描述 YYH拥有一个有n个城市的国家,编号为1~n.其中城市i到城市j的路径长度为i和j的最小公倍数.现在YYH想建一些高速公路,使得任意两座城市都能通过高速公路直接或间接到达.建造一条高速公路的 ...

  10. TMS320F28379D 使用心得之 SCI

    原文地址https://blog.csdn.net/qq_39545674/article/details/82597106 一.SCI 简介SCI(Serial Communication Inte ...