PHP中类的理解和应用[一]
许多PHP的爱好者在学习过程中感到对PHP中类的概念较难理解和掌握,虽然知道类既然存在就有其存在的道理,但是由于平时接触和使用的机会较少,也就一略而过。其实,只要我们理解变量和函数这些PHP基本概念的话,掌握类的含义就不成问题。鉴于类在PHP的重要作用,本文将结合具体事例介绍PHP中类的概念和应用。
(一)
所谓类就是指由变量和作用于变量的函数组成的集合。类提供了一种对现实世界中事物的描述方式。通过有效的使用类,我们可以将描述同一对象的多个变量和函数组合在一起,作为一个整体使用,从而使编写出来的程序更直观,更合理,更易于维护。
举一个比较通俗的例子,我们可以创建一个名为Bike的类来描述现实生活中的一辆自行车。首先,我们设定该类中的变量包括踏板$pedals,链条$chain,前轮$front wheel,后轮$rear wheel,刹车$brakes, 以及手柄$handle。然后,我们创建停车Stop(), 加速Accelerate(), 左转TurnLeft()和右转TurnRight()等函数。这样,我们就有了一个可以描述自行车这一对象所有行为和属性的类。例如,我们可以将$front wheel 和$rear wheel变量传入TurnLeft()函数,从而得到某种输出结果。
也许有人会问上述例子虽然有趣,但是我们完全可以使用常规的变量和函数实现同样功能,为什么一定要坚持使用这么烦琐的类呢?当然,如果我们在脚本中只需要描述一辆自行车话,定义一个类似乎没有什么特殊的价值。但是,如果当脚本需要涉及多辆自行车时呢?如果我们还是采用常规的为每量自行车都定义变量和函数的方法,那么光是跟踪每个变量,确保正确的变量输入正确的函数就是一项相当复杂的工作。相反,如果采用类的方式,就可以有效的减少所需变量的数量。此外,一个已经定义的类还可以被包含在其它文件或脚本中,从而实现代码的重复利用。
(二)
对PHP类的概念有所了解之后,我们就来具体看一下如何在脚本中创建和使用类。
相信大家在创建站点时一定会因为要顾及页面的显示效果,字体的样式和大小等细节而影响对整个页面布局和整个站点流程的设计和构思。下面,我们就利用PHP的类来控制HTML的页面输出。
首先,我们使用如下代码创建一个名为Style的类,并在类中定义设置页面属性所需的变量:
<?php
class Style {
var $text;
var $alink;
var $vlink;
var $link;
var $bgcol;
var $face;
var $size;
var $align;
var $valign;
}
?>
相信熟悉HTML语言的读者一定不会对我们在Style类中声名的变量感到陌生。
下面,我们在Style类中创建一个与类同名的函数。代码如下:
<?php
class Style {
function Style ($text="#000000",$alink="#AA00AA",$vlink="#AA00AA",
$link="#3333FF",$bgcol="#999999",$face="Arial",$size=3,
$align="CENTER",$valign= "TOP")
{
$this->text=$text;
$this->alink=$alink;
$this->vlink=$vlink;
$this->link=$link;
$this->bgcol=$bgcol;
$this->face=$face;
$this->size=$size;
$this->align=$align;
$this->valign=$valign;
}
}
?>
说明:
在类中可以使用“$this”指代类本身,使用“->”运算符引用类中的各个变量或函数。类中创建的与类同名的函数称为构造函数。构造函数在创建新的对象实例时自动执行,从而将类中设定的默认值赋予该对象实例。
PHP中,我们可以通过创建对象实例的方法使用一个已经定义的类。语法格式如下:
<?php $Instance_name = new Class; ?>
例如,本例中我们可以使用如下代码创建一个名为$Basic的对象实例,该对象实例将自动获得Style类中构造函数指定的默认值:
<?php $Basic = new Style; ?>
一个类可以创建多个对象实例,其中每个对象实例都继承该类的默认属性,可以调用类中的所有变量和函数。有时我们可能需要为由同一个类创建的多个对象实例设置不同的属性,虽然我们可以在创建对象实例时修改类的默认值,但是这种方式一方面缺乏灵活性,另一方面按照PHP的约定,如果用户在创建新的对象实例时声明了某个变量值的话,则必须同时声明该类中所声明变量之后的所有变量。例如,如果我们在创建$Basic对象实例时显式修改了text变量值的话,则必须同时再声明该类中位于text变量之后的所有变量,即Style类的全部变量都需要再重新声明一遍。显然,我们需要使用其它更为便捷的方式修改对象实例中的某个变量值。这里,我们可以通过在Style类中创建一个专门用于