Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5104217
  • 博文数量: 921
  • 博客积分: 16037
  • 博客等级: 上将
  • 技术积分: 8469
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-05 02:08
文章分类

全部博文(921)

文章存档

2020年(1)

2019年(3)

2018年(3)

2017年(6)

2016年(47)

2015年(72)

2014年(25)

2013年(72)

2012年(125)

2011年(182)

2010年(42)

2009年(14)

2008年(85)

2007年(89)

2006年(155)

分类:

2006-09-27 20:05:49

什么是PEAR?(第六篇)


▲ 类別的属性

从第52-76行包含在 class Benchmark_Timer后的大括号“{”与“}”中,用var关键字定义的变数,在类別中称之为属性,由程式码可知Benchmark_Timer类別拥有markers,auto,strlen_max三个属性,属性名称的等号后面不是变数的资料型态就是变数的预设值,在本例中,markers是一个阵列(array)型态的变数,而auto变数的预设值是false,strlen_max变数的预设值是“0”。

所谓预设值,就是当开发者沒有特別指定时,就把某个变数以预设值当作变数的值。

当使用者用new方法產生Benchmark_Timer物件时,每个物件都会拥有这三个属性,我将new出来的Benchmark_Timer物件称为「时钟物件」,因为该物件是用来计算程式执行时所使用的时间。





通常程式开发者帮属性命名时会以属性的意义当名称,方便使用者可以「望文生义」。例如:markers代表「标记」,意思是对时钟物件做个记号,请注意,可设定多个标记,用来检查每个标记间时间间隔的多寡。而auto代表是否一开始就自动啟动时钟物件。strlen_max代表字串长度的最大值,str就是字串(string), len代表长度(length),max代表最大值(maximum),稍后我会用范例加以說明这些属性的用法。



▲ 方法

Timer.php中提供了许多的方法,我只用第161-212行的程式码来加以解說,大家可看到5个被包在class Benchmark_Timer中用function开头的段落。这5个function就代表类別的方法,也就是說,这里有5个方法,名称为display方法、start方法、stop方法、setMarker方法、timElapsed方法,而每个方法內大括号“{”与“}”中的內容就是方法实际运作的程式码。display方法是用来将时钟物件的执行结果显示出来,start方法是用来啟动时钟物件,由此类推,由字面的意思就可大致知道方法的意义。





在前例show.php档中的第4行,$timer这Benchmark_Timer物件使用了start方法。


在前例show.php档中的第4行,$timer这个Benchmark_Timer物件使用了start方法。


◆ example1.php范例

为了帮助大家了解,我再撰写一个名为example1.php的档案,內容一樣是使用Benchmark套件,且为了解說方便,在每一行前面我编上了行号。完整程式码如下:





首先,第2行引入Benchmark资料夹中的Timer.php档。
为了让大家了解类别与物件的关系,特別在第3行、4行產生两个Benchmark_Timer物件,並分別放入$timer1, $timer2变数中。也就是說產生了两个时钟物件,请注意,这两个物件虽然长的一模一樣,但使用上是互不相干的。



在第5行中,第一个时钟物件啟动,$timer1物件用start方法开始计时,请您想像有一个时钟按下开关开始计时。接着在第6行用php內建的sleep( )函式让程式的执行停顿一秒。

第7行接着啟动第二个时钟,请您想像第二个时钟按下开关开始计时。并在第8行让程式在停顿一秒钟。

第9行用setMarker方法,设定$timer1物件的marker属性,並将此时间鲇标记命名为mark1字串。其实在物件使用start方法与stop方法时,setMarker方法也会自动被执行,並将开始与结束的时间点标记名称设为「Start」与「Stop」。

第11行用timeElapsed方法计算$timer1时钟物件从啟动到mark1标记,程式执行所使用的时间,相当於计算第1行到第9行的执行时间,並用”秒”为单位将时间差显示出来。这个方法有两个参数,第一个代表开始计算时间的标记名称,第二个代表结束计算时间的标记名称,所以分別填入「Start」与「mark1」字串。

第13行再让程式休息一秒。

第15行用stop方法将第一个时钟物件停止,也就是结束第一个时钟的计时,並将时间的使用情形用display方法完整显示出来。

第18行用stop方法将第二个时钟物件停止,也就是结束第二个时钟的计时,並在第19行将时间的使用情形用display方法完整显示出来。

OK ! example1.php大功告成。

执行结果如下图:






让我们将执行结果对照一下程式码,在第5行时第一个时钟物件啟动,到第9行该物件设定一个名叫mark1的标记,中间经过了第6行与第8行两个sleep(1),所以从5-9行总共使用約2秒的时间,显示在网页上的结果是1.999727秒,嗯,果然符合预期。

接著对照第一个时钟物件在网页上display的结果。

您会发现Benchmark_Timer物件的display方法会将时钟物件的执行过程用一个表格做完整的呈现。

第一个表格最下面的总时间列total告诉我们,从开始到结束第一个时钟物件总共用掉2.999583秒,其中从啟动到mark1用掉了1.999727秒,mark1到停止用掉了0.999856秒,检视原始码第9行设定mark1到第15行计时停止中间第13行也有一个sleep(1),所以计时的结果是正确的。

第二个时钟物件的执行结果较为单纯,只有啟动与结束两种状況,由第二个表格可知总共用掉2.000141秒,对照原始码,从第7行的啟动到第18行的停止中间,第8与第13行各出现一个sleep(1),也就是約耗掉2秒钟,可见第二个时钟物件的执行结果也是正确的。

到目前为止,大家是否觉得PEAR套件超好用的呢,有了Benchmark套件,我们可以轻轻松松知道每个网页的执行时间。日后若发生了网页执行速度缓慢的情形,想知道问题出在何处,这可是一个很好用的工具喔!!

从第六章起,我们将逐一介绍几个常用的套件,这些套件的功能都是程式开发者使用率极高的,如资料库使用,表单的制作与验证?,翻页功能,简单的身分认证…等。虽然本文章无法将我所知道的套件全部介绍,但若能引起大家的回响,能够吸引更多人共同投入PEAR套件的研究。


◆ 寻求协助。

套件的使用,本人认为是先苦后甘,先要花时间了解套件的使用方法,这一段是「先苦」,但若学会了,以后自行撰写程式码可就轻松愉快了,这一段是「后甘」。

若使用或学习PEAR套件上遭遇了困难,该怎麼办呢?何处可寻求协助?

本人根据自身的经验,找出以下的管道供读者参考:



◆ 閱读本文章

閱读本文章当然是最佳选择了,目前PEAR的相关资料百分之九十九都是英文或其他语言,繁体? 中文或简体中文的资料真是少之又少。

我们计画将PEAR的研究心得继续在本网站里发布,目前因为中文PEAR的资料缺乏,希望尽己之力,为PEAR的內容多写一些介绍,同时继续研究和学习那PEAR中的272个套件,希望大家共同参与,并能够分享研究的成果。


◆ PEAR官方网站

在PEAR官方网站,您可以寻找套件,下载套件,閱读套件的简介,开发者姓名,說明文件等。这裡也有一些专家针对某些套件撰写的文章,或者您也可以察看套件被下载的次数统计等。总而言之,问题发生了,一定要试试来这裡找答案!!不过可惜的是,网站內容全是英文,閱读起来总是有些文化障碍。

详细內容请参閱PEAR官方网站介绍。


◆ mailing list

大家可在PEAR官方网站中加入使用者的mailing list,以我为例,每天E-mail信箱总会收到数十封标题有PEAR字樣的信,这些信的內容是全世界PEAR使用者将本身使用上发生的问题提问出来,借由mail来询问所有mailing list的成员,而热心的成员会对针这些问题加以解答並同樣mail给所有成员。

加入mailing list的缺点是,信箱必须夠大,因为信真的很多。

◆ 套件內的說明与范例

有些套件很贴心的內附使用說明文件,甚至范例程式供使用者閱读与测试。这可让使用者节省许多探索套件用法的时间。

大家若要学习一个新套件,第一步总是会先到套件內寻找說明文件或范例。

◆ 原始码

学习PEAR最直接的方法就是閱读原始码与註解。不过这真的有点困难,因为每个php档通常有数百行、甚至数千行的程式码与註解。幸好,物件导向的撰写方式让程式码「段落分明」,较易閱读,而且所有PEAR套件的註解都可以用phpDocumentor套件提供的指令将註解独立出来成为一份文件或网页,借由详细的註解来避免掉閱读大量的原始码。

◆ Google
最后,若以上方法都找不到答案,我建议您使用史上最強的搜寻引擎-Google来找一找吧!
我也经常使用Google找到不少PEAR相关的文章或范例程式喔。

阅读(1661) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~