PHP设计模式之解释器模式

编程语言总是用其他编程语言编写的。例如:PHP 就是 C 语言编写的。所以,换个思维去考虑,使用 PHP 能否开发其他类型编程语言的东西呢?
答案是肯定的,smarty 模版引擎就是解释器模式的最好应用。其工作原理就是在静态的模版页面能够使用指定的标签语法完成各种比如:取值,条件判断,循环,函数等编程语言所具备的功能。
主要是为了是实现业务和视图的分离 ,而视图又要使用一部分取值、判断和循环业务操作,所以产生了模版引擎。

通过父类 Compile 编译类,可以实现各种语法,比如条件判断,循环,函数功能等。

demo1.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
header('Content-Type:text/html; charset=utf-8');

abstract class Compile{
abstract public function expression($parse, $str);
}

//变量操作
class Variable extends Compile{
public function expression($parse, $str){
$patten = '/\{\$([\w]+)\}/e';
if(preg_match($patten, $str)){
$str = preg_replace($patten, "\$parse->vars['$1']", $str);
}
return $str;
}
}

// 解析类
class Parse{
private $vars = [];

public function __get($_key) {
return $this->$_key;
}

public function assign($var, $value){
$this->vars[$var] = $value;
}

public function display($str){
$variable = new Variable();
$str = $variable->expression($this, $str);
return $str;
}
}

$parse = new Parse();
$parse->assign('name', 'suse');
$parse->assign('age', 20);

$str = '

This is {$name}, {$age}岁。

';

echo $parse->display($str);