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类中创建一个专门用于修改变量值的函数实现上述功能。具体代码如下:
Function Set($varname,$value) {
$this->$varname=$value;
}
例如,如果我们需要将$Basic对象实例中size变量的值改为2时,使用如下代码即可实现:
<?php $Basic->Set( ‘size’, 2); ?>
说明:
->运算符用于向PHP解释器说明运行$Basic对象实例中的Set()函数。
通过有效的使用Set()函数,我们可以灵活的设置和控制不同的对象实例。比方说,如果我们希望为页面输出表格的标题行和内容行设置不同的背景颜色和字体大小的话,可以首先创建两个对象实例,然后使用Set()函数分别设置各自不同的属性。具体代码如下:
<?php
$Tableheader= new Style;
$Tableheader->Set( 'text', '#0000FF');
$Tableheader->Set( 'bgcol', '#000000');
?>
<?php
$Tablecontent=new Style;
$Tablecontent->Set( 'bgcol', '#AAAAAA');
$Tablecontent->Set( 'size',2);
?>
PHP中类的理解和应用[二]
时间: 2024-10-24 03:34:53
PHP中类的理解和应用[二]的相关文章
PHP中类的理解和应用[一]
PHP中类的理解和应用[一] 许多PHP的爱好者在学习过程中感到对PHP中类的概念较难理解和掌握,虽然知道类既然存在就有其存在的道理,但是由于平时接触和使用的机会较少,也就一略而过.其实,只要我们理解变量和函数这些PHP基本概念的话,掌握类的含义就不成问题.鉴于类在PHP的重要作用,本文将结合具体事例介绍PHP中类的概念和应用. (一) 所谓类就是指由变量和作用于变量的函数组成的集合.类提供了一种对现实世界中事物的描述方式.通过有效的使用类,我们可以将描述
PHP中类的理解和应用
许多PHP的爱好者在学习过程中感到对PHP中类的概念较难理解和掌握,虽然知道类既然存在就有其存在的道理,但是由于平时接触和使用的机会较少,也就一略而过.其实,只要我们理解变量和函数这些PHP基本概念的话,掌握类的含义就不成问题.鉴于类在PHP的重要作用,本文将结合具体事例介绍PHP中类的概念和应用. (一) 所谓类就是指由变量和作用于变量的函数组成的集合.类提供了一种对现实世界中事物的描述方式.通过有效的使用类,我们可以将描述同一对象的多个变量和函数组合在一起,作
深入理解JVM之二:垃圾收集器概述
前言 我们知道Java的内存区域分为程序计数器.虚拟机栈.本地方法栈.Java堆和方法区,而且其中的程序计数器.虚拟机栈和本地方法栈都是线程独立的,也就是说这三块内存区域的生命周期与线程是同生共死的.栈中帧栈在类结构确定的时候就已经知道该分配多少内存了,所以当线程结束的时候,内存也跟着一起回收了,从这个角度看,这三块的内存区域的内存分配和垃圾收集就比较固定了.反观Java堆和方法区,比如我们定义一个接口,接口有着不同的实现类,而每个实现类的内存可能会不一样,每个实现类的方法的多个语句分支也可能需
从Java视角理解系统结构(二)CPU缓存
从Java视角理解系统结构连载, 关注我的微博(链接)了解最新动态 众所周知, CPU是计算机的大脑, 它负责执行程序的指令; 内存负责存数据, 包括程序自身数据. 同样大家都知道, 内存比CPU慢很多. 其实在30年前, CPU的频率和内存总线的频率在同一个级别, 访问内存只比访问CPU寄存器慢一点儿. 由于内存的发展都到技术及成本的限制, 现在获取内存中的一条数据大概需要200多个CPU周期(CPU cycles), 而CPU寄存器一般情况下1个CPU周期就够了. CPU缓存 网页浏览器为了
谈谈你对aja的理解(一、二)
什么是Ajax Ajax是Asynchronous JavaScript and XML的缩写,这一技术能够向服务器请求额外的数据而无需卸载整个页面,会带来良好的用户体验.传统的HTTP请求流程大概是这样的,浏览器向服务器发送请求-〉服务器根据浏览器传来数据生成response-〉服务器把response返回给浏览器-〉浏览器刷新整个页面显示最新数据,这个过程是同步的,顺序执行. AJAX 在浏览器与 Web 服务器之间使用异步数据传输(HTTP 请求)从服务器获取数据,这里的异步是指脱离当前浏
胡乱理解ADO.NET(二)
在上篇文章中说了程序对数据库的操作后,我们通常要返回操作信息.例如:返回受影响的行数或者返回查询的数据.SqlDataReader可以对返回的数据进行操作,但只是只读的,而且必须要保持连接才行.那么能不能更灵活的对返回的数据操作呢?答案是肯定的. 既然我要对返回的数据进行灵活的操作,那么我们是不是要搞个东西来存放这些数据.要不然程序得到数据库里的数据后放哪?我们用什么来存放这些数据呢?有个类叫做dataset官方的解释叫做:表示数据在内存中的缓存.看这个解释多少对我来说多少有点茫然.我个人把它通
ruby:理解Symbol的二篇好文章
理解 Ruby Symbol,第 1 部分 http://www.ibm.com/developerworks/cn/opensource/os-cn-rubysbl/ 理解 Ruby Symbol ,第 2 部分: Symbol 内幕http://www.ibm.com/developerworks/cn/opensource/os-cn-rubysbl2/index.html
32位有符号整数 ‘32位’和‘有符号’分别怎么理解
问题描述 32位有符号整数'32位'和'有符号'分别怎么理解 解决方案 解决方案二:32个二进制位带有正负符号解决方案三:既然称其为有符号整数,二进制知道有符号数用1表示负数,0代表正数把解决方案四:引用2楼chinajiyong的回复: 既然称其为有符号整数,二进制知道有符号数用1表示负数,0代表正数把 况且有符号数表示的范围也比无符号数宽啊比如32位机int取值范围是-2^31~2^31-1而无符号数取值范围是0~2^31-1解决方案五:回去翻翻计算机基础,上面讲的很明白(源码.反码和补码这
如何快速理解设计模式?
问题描述 如何快速理解设计模式? 设计模式那么多,要怎么快速理解呢?又要在什么情况下使用.求大神指教. 解决方案 设计模式快速理解不了,这个东西需要不断的琢磨,没有一定的开发经验想快速理解也只能是理解的皮毛.相反,有过3年左右开发经验的,自然而然就能够理解. 解决方案二: 你做过很多项目后自然而然就会理解的,设计模式是快速理解不了的. 解决方案三: 这个是需要时间的,没有太多的捷径可走 解决方案四: 认认真真看懂23种模式的书籍和代码. 网上有很多这样的资料,尤其要找代码的资料 解决方案五: 要