1 <?php
2 /**
3 * @hypo
4 接口的特性:接口中定义的所有方法都必须是public
5 接口的实现:一个接口可以使用implements操作符,类中必须实现接口中的所有方法,否则会报fatal错误,如果要实现多个接口,可以使用逗号来分隔多个接口的名称。
6 */
7 header("Content-type:text/html;charset=utf-8");
8 interface iTemplate
9 {
10 public function setVariable($name, $var);
11 public function getHtml($template);
12 }
13 class Template implements iTemplate
14 {
15 private $vars = array();
16
17 public function setVariable($name, $var)
18 {
19 $this->vars[$name] = $var;
20 }
21
22 public function getHtml($template)
23 {
24 foreach($this->vars as $name => $value) {
25 echo "\n".$name."\n".$value."<br>";
26 }
27
28
29 }
30 }
31 // $t=new Template();
32 // $t->setVariable("ji","100");
33 // $t->setVariable("ji2","200");
34 // $t->getHtml('aa');
35 ?>
36 <?php
37 //定义一接口,实现价格折扣
38 interface zk{
39 public function jiage();//价格
40 public function user_s();//用户
41 }
42 class ordUser implements zk{//普通用户.必须实现接口所有
43 private $zkl="0.97";
44 function jiage(){
45 return $this->zkl;
46 }
47 function user_s(){
48 return '普通用户';
49 }
50 }
51
52 class vipUser implements zk{//VIP用户.必须实现接口所有
53 private $zkl="0.91";//折扣
54 function jiage(){
55 return $this->zkl;
56 }
57 function user_s(){
58 return 'vip用户';
59 }
60 }
61
62 class svipUser implements zk{//超级vip用户.必须实现接口所有
63 private $zkl="0.88";
64 function jiage(){
65 return $this->zkl;
66 }
67 function user_s(){
68 return 'svip用户';
69 }
70 }
71 class run{//价格折扣计算
72 var $yjg;
73 var $us;
74 function buy($yjg,zk $us){//zk接口名,可以去掉没影响
75 $this->yjg=$yjg;
76 $this->us=$us;
77 $zjg=$this->us->jiage();
78 $user=$this->us->user_s();
79 echo $user.':原价格'.$yjg.',现价格'.$zjg*$yjg."<br>";
80
81 }
82
83 }
84
85 class hdPrc extends run{//继承run 显示不同用户价格
86 function sp($hd){
87 $this->buy(active::showActivePrc($hd),new ordUser);
88 $this->buy(active::showActivePrc($hd),new vipUser);
89 $this->buy(active::showActivePrc($hd),new svipUser);
90 }
91
92 }
93 class active{//静态活动价格添加,显示,器
94 public static $aName;
95 public static $aPrc;
96 public static function addActive($aNam,$aPr){
97 self::$aName[$aNam]=$aPr;
98 }
99 public static function showActivePrc($aNam){
100 return self::$aName[$aNam];
101 }
102 }
103
104 active::addActive("电影活动","111");
105 active::addActive("音乐活动","1122");
106
107 // $t=new run;
108 // $t->buy(active::showActivePrc("音乐活动"),new ordUser);
109 // $t->buy('111',new vipUser);
110 // $t->buy('111',new svipUser);
111 $b=new hdPrc;
112 $b-> sp('音乐活动');
113 ?>