15.3实例分析——深入理解PHP的类和对象
15.3 实例分析——深入理解PHP的类和对象
有了前面学习关于面向对象编程的基础知识,本节通过一个具体实例来帮助读者深入认识PHP中的类和对象。在面向对象编程的思想中,任何一个事物都是对象,一个Web页面也不会例外。这节就使用PHP创建一个代表Web页面的类,使用该类可以生成HTML页面。
(1)声明属性。一个Web页面就是一个HTML文档,HTML文档应该具有标题和内容,这里再增加一个属性,就是HTML文档的META关键字,使用META关键字有利于搜索引擎搜索到该Web页面。所以,这个Web页面类应该具有的属性是标题、内容和关键字。它们都是公有属性,应该使用public关键字声明,代码如下。
public $title;
public $content;
public $keywords;
因为网站的每个页面都应该有一个导航栏,以便用户访问完整的任一个栏目,所以还需声明一个存放导航栏内容的属性。在这里,将这个属性声明为数组,用数组来存放导航栏的内容,代码如下。
public $buttons= array(
"
主页"=>"#",
"
产品"=>"#",
"
服务"=>"#",
"
联系我们"=>"#",
"
网站地图"=>"#"
);
这里定义了5个导航链接,每个导航链接名称作为数组的索引,而链接的URL作为数组元素。这里没有明确的URL,所以均以#代替。
(2)定义该类的方法,通过这些方法可以生成Web页面的各个部分,如Web页面的页头部分、关键字部分、CSS部分、页面的导航链接、正文部分以及页面的页底部分。
(3)实现页头部分。一个页头部分主要显示网站的LOGO和网站名称。在本实例中,这些内容将放置在一个表格当中。在类的方法中,使用echo语句将这个HTML表格输出,从而达到显示页头内容的目的。将显示页头部分的类方法命名为DisplayHeader,代码如下。
01 public function DisplayHeader()
02 {
03 echo "<table width=\"100%\" cellpadding =\"12\" cellspacing =\"0\" border =\"0\">";
04 echo "<tr>";
05 echo "<td align =\"left\"><img src = \"apache.gif\" /></td>";
06 echo "<td bgcolor=\"#FFFFFF\">";
07 echo " <h1>
网站名称放在这里</h1>";
08 echo "</td>";
09 echo "<td align =\"right\"></td>";
10 echo "</tr>";
11 echo "</table>";
12 }
【代码解析】第03~11行其实输出的是一个表格。
(4)输出关键字部分。关键字定义在<emta>标签中,所以输出关键字的类方法代码如下,将其命名为DisplayKeywords。
01 public function DisplayKeywords()
02 {
03 echo "<meta name=\"keywords\" content=\"";
04 echo $this->keywords;
05 echo "\" />\r\n";
06 }
【代码解析】在方法DisplayKeywords()中,使用了$this关键字,它代表类的当前实例。代码第04行使用$this->keywords取得当前实例的keywords属性的值。
(5)实现其他显示Web页面各个部分的类方法。和方法DisplayKeywords()类似,这里不再一一列举。将这个Web页面类命名为Page,代码15-9为该类完整的代码。
代码15-9 Page类的完整代码15-9.php
01 <?php
02 class Page
03 {
04 public $title="
音乐唱片大全"; //
页面标题
05 public $content; //
页面内容
06 public $keywords="MP3,
音乐,
唱片,music"; //
页面关键字
07
08 public $buttons= array( //
页面导航数组
09 "
主页"=>"#",
10 "
产品"=>"#",
11 "
服务"=>"#",
12 "
联系我们"=>"#",
13 "
网站地图"=>"#"
14 );
15
16 public function DisplayTitle() //
显示页面标题的方法
17 {
18 echo "<title>";
19 echo $this->title;
20 echo "</title>\r\n";
21 }
22
23 public function DisplayContent() //
显示页面内容的方法
24 {
25 echo $this->content;
26 }
27
28 public function DisplayKeywords() //
显示页面关键字的方法
29 {
30 echo "<meta name=\"keywords\" content=\"";
31 echo $this->keywords;
32 echo "\" />\r\n";
33 }
34
35 public function DisplayPage() //
输出整个页面
36 {
37 echo "<html>\r\n<header>";
38 $this->DisplayTitle();
39 $this->DisplayStyles();
40 $this->DisplayKeywords();
41 echo "</header>\r\n<body>";
42
43 $this->DisplayHeader();
44 $this->DisplayMenus($this->buttons);
45 $this->DisplayContent();
46
47 $this->DisplayFooter();
48 echo "</body>\r\n</html>";
49 }
50
51 public function DisplayStyles() //
显示CSS
部分
52 {
53 echo "<style>";
54 echo "h1{color:#000000; font-size:24pt; text-align:center;font-family:arial, sans-serif}";
55 echo ".menu{color:#256114; font-size:12pt; text-align:center;font-family: arial,sans-serif;
56 font-weight:bold}";
57 echo "td{background:#EFEFEF}";
58 echo "p{color:black; font-size:12pt; text-align:justify;font-family: arial,sans-serif}";
59 echo "p.foot{color:#256114; font-size:9pt; text-align:center;font-family: arial,sans-serif;
60 font-weight:bold}";
61 echo "a:link,a:visited,a:active{color:#256114}";
62 echo "</style>";
63 }
64
65 public function DisplayHeader() //
输出页头部分
66 {
67 echo "<table width=\"100%\" cellpadding =\"12\" cellspacing =\"0\" border =\"0\">";
68 echo "<tr>";
69 echo "<td align =\"left\"><img src = \"apache.gif\" /></td>";
70 echo "<td bgcolor=\"#FFFFFF\">";
71 echo " <h1>
音乐唱片大全</h1>";
72 echo "</td>";
73 echo "<td align =\"right\"></td>";
74 echo "</tr>";
75 echo "</table>";
76 }
77
78 public function DisplayMenus($buttons) //
输出页面导航部分
79 {
80 if(is_array($buttons) && count($buttons)==0)
81 return;
82 echo "<table width=\"100%\" bgcolor=\"#FFFFFF\" cellpadding=\"4\" cellspacing=\"4\"\n";
83 echo " <tr>\n";
84
85 //calculate button size
86 $width = 100/count($buttons);
87
88 while (list($name, $url) = each($buttons))
89 {
90 $this -> DisplayButton($width, $name, $url, !$this->IsURLCurrentPage ($url));
91 }
92 echo " </tr>\n";
93 echo "</table>\n";
94 }
95
96 public function IsURLCurrentPage($url) //
是否是当前页面链接
97 {
98 if(strpos($_SERVER["PHP_SELF"], $url )==false)
99 {
100 return false;
101 }
102 else
103 {
104 return true;
105 }
106 }
107
108 public function DisplayButton($width, $name, $url, $active = true) //
输出按钮
109 {
110 if ($active)
111 {
112 echo "<td width =\"$width%\" align=\"center\">";
113 echo "<a href = \"$url\">";
114 echo "<a href =\" $url \"><span class=\"menu\">$name</span></a></td>";
115 }
116 else
117 {
118 echo "<td width =\"$width%\">";
119 echo "<img src =\"side-logo.gif\">";
120 echo "<span class=\"menu\">$name</span></td>";
121 }
122 }
123
124 public function DisplayFooter() //
输出页脚部分
125 {
126 echo "<table width = \"100%\" bgcolor =\"black\" cellpadding =\"12\" border =\"0\">";
127 echo "<tr>";
128 echo "<td>";
129 echo "<p class=\"foot\">
版权所有 © 2012 | Powerd
130 by Apache + PHP + MySQL</p>";
131 echo "</td>";
132 echo "</tr>";
133 echo "</table>";
134 }
135 }?>
【代码解析】 代码15-9定义了完整的Page类,该类通过不同的类方法,输出Web页面的不同部分。
(6)在一个PHP程序中使用这个类生成Web页面,同时检验类定义的准确与完整性。代码15-10演示了如何在程序中使用Page类。
代码15-10 在程序中使用Page类15-10.php
01 <?php
02 include("15-9.php");
03
04 $page=new Page();
05 $page->content="<p>MP3
可谓是大名鼎鼎,它采用MPEG Audio Layer 3
技术,将声音用 1
∶10
06
甚至 1
∶12
的压缩率压缩,采样率为44kHz
、比特率为112kbit/s
。 MP3
音乐是以数字方式储存的音乐,
07
如果要播放,就必须有相应的数字解码播放系统,一般通过专门的软件进行MP3
数字音乐的解码,
08
再还原成波形声音信号播放输出,这种软件就称为MP3
播放器,如Winamp
等。</p>";
09 $page->DisplayPage();
10 ?>
【代码解析】代码首先将Page类的定义引入程序,如代码第02行所示。接着,定义了类的实例$page,并将类的属性$content赋值一段文字,如代码第04行所示,这段文字将成为Web页面的主要内容。最后,第09行通过类方法DisplayPage()生成这个Web页面。通过浏览器访问15-10.php,将会看到如图15-7所示的效果。

图15-7 使用Page类生成Web页面
上一篇:15.2PHP中的类和对象
下一篇:15.4小结
