/*
* WEB开发笔记 www.chhua.com 每日练习 PHP面向对象编程——单一职责原则(SRP)
前面我写了关于OCP的文字,这里再写一下SRP,其实SRP的主要目的还是提高代码的灵活性,下面通过一个简单的模板引擎来说明一下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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?php
class Template{
	private $vars;
	private $file;
 
	public function __construct($file){
		$this->file=$file;
	}
 
	public function set($vars,$value){
		$this->vars[$vars]=$value;
	}
 
	public function asHtml(){
		extract($this->vars);//把数组拆分成键值变量
		ob_start();//缓存开始
		include $this->file;
		$string=ob_get_contents();//得到被抑制的输出
		ob_end_clean();//缓存结束
		return $string;
	}
}
$hello="Hello World!";
$tmp=new Template("test.php");//实例化模板
$tmp->set("hello",$hello);//设置变量
echo $tmp->asHtml();//输出HTML
 
/*以下代码是改正后的,单一职责原则之后的模板引擎,分离职责!
 * */
 
class file{//提取单独的模板文件
	private $name;
	public function __construct($name){
		$this->name=$name;
	}
 
	public function getContents(){//返回文件内容
		return file_get_contents($this->name);
	}
}
 
class TemData {//处理单独的模板变量
	private $vars;
	public function set($var,$value){
		$this->vars[$var]=$value;
	}
	public function getData(){
		return $this->vars;
	} 
}
 
class Tpl {//使用提取的模板类
	private $data;
	private $file;
	public function __construct($file){
		$this->file=new file($file);
		$this->data=new TemData();
	}
 
	public function set($var,$value){
		$this->data->set($var,$value);
	}
 
	private function processTemplate(){
		extract($this->data->getData());//把数组拆分成键值变量
		$string=$this->file->getContents();
		eval("?>".$string);//把模板文件当PHP代码执行
	}
 
	public function asHtml(){
		ob_start();//缓存开始
		$this->processTemplate();//
		$string=ob_get_contents();//得到被抑制的输出
		ob_end_clean();//缓冲结束
		return $string;
	}
}
$hello="Hello World!";
$tmp=new tpl("test.php");//实例化模板
$tmp->set("hello",$hello);//设置变量
echo $tmp->asHtml();//输出HTML
 
/*
 *以上的演示,就是PHP面向对象的单一职责原则,还可以进一步的完善和更改,就是和OCP原则相接合,改成$tmp=new tpl(new file,new temData)是不是会更好?呵呵,继续关注我的博客,www.chhua.com
 * */
?>

自由转载,转载请注明: 转载自WEB开发笔记 www.chhua.com

本文链接地址: PHP面向对象编程——单一职责原则(SRP) http://www.chhua.com/web-note1121

相关笔记

更多