php面向对象全攻略 (一) 面向对象基础知识


Posted in PHP onSeptember 30, 2009

1.面向对象的概念
面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构,OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成,OOP 达到了软件工程的三个目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。面向对象一直是软件开发领域内比较热门的话题,首先,面向对象符合人类看待事物的一般规律。其次,采用面向对象方法可以使系统各部分各司其职、各尽所能。为编程人员敞开了一扇大门,使其编程的代码更简洁、更易于维护,并且具有更强的可重用性。有人说PHP 不是一个真正的面向对象的语言,
这是事实。PHP 是一个混合型语言,你可以使用OOP,也可以使用传统的过程化编程。然而,对于大型项目,你可能需要在PHP 中使用纯的OOP 去声明类,而且在你的项目里只用对象
和类。这个概念我先不多说了,因为有很多朋友远离面向对象编程的主要原因就是一接触面向对象概念的时候就理解不上去,所以就不想去学下去了。等读者看完整篇内容后再去把概
念搞明白吧。
2.什么是类,什么是对象,类和对象之间的关系
类的概念:类是具有相同属性和服务的一组对象的集合。它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。在面向对象的编程语言中,类是
一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。
对象的概念:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。从更抽象的角度来说,对
象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用;它是一组属性和有权对这些属性进行操作的一组服务的封装体。客观世界是由对象
和对象之间的联系组成的。
类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是类。类描述了一组有相同特性(属性)和相同行为(方法)的对象。
上面大概就是它们的定义吧,也许你是刚接触面向对象的朋友,不要被概念的东西搞晕了,给你举个例子吧,如果你去中关村想买几台组装的PC 机,到了那里你第一步要干什么,
是不是装机的工程师和你坐在一起,按你提供的信息和你一起完成一个装机的配置单呀,这个配置单就可以想象成是类,它就是一张纸,但是它上面记录了你要买的PC 机的信息,如
果用这个配置单买10 台机器,那么这10 台机子,都是按这个配置单组成的,所以说这10 台机子是一个类型的,也可以说是一类的。那么什么是对象呢,类的实例化结果就是对象,用这
个配置单配置出来(实例化出来)的机子就是对象,是我们可以操作的实体,10 台机子,10个对象。每台机子都是独立的,只能说明他们是同一类的,对其中一个机做任何动作都不会
影响其它9 台机器,但是我对类修改,也就是在这个配置单上加一个或少一个配件,那么装出来的9 个机子都改变了,这是类和对象的关系(类的实例化结果就是对象)。
3.什么是面向对象编程呢?
就不说他的概念,如果你想建立一个电脑教室,首先要有一个房间,房间里面要有N 台电脑,有N 张桌子,N 把椅子,白板,投影机等等,这些是什么,刚才咱们说了,这就是对象,能看到的一个个的实体,可以说这个电脑教室的单位就是这一个个的实体对象,它们共
同组成了这个电脑教室,那么我们是做程序,这和面向对象有什么关系呢?开发一个系统程序和建一个电脑教室类似,你把每个独立的功能模块抽象成类,形成对象,由多个对象组成
这个系统,这些对象之间都能够接收信息、处理数据和向其它对象发送信息等等相互作用。
4.如何抽象出一个类?
上面已经介绍过了,面向对象程序的单位就是对象,但对象又是通过类的实例化出来的,所以我们首先要做的就是如何来声明类,做出来一个类很容易,只要掌握基本的程序语法定
义规则就可以做的出来,那么难点在那里呢?一个项目要用到多少个类,用多少个对象,在那要定义类,定义一个什么样的类,这个类实例化出多少个对象,类里面有多少个属性,有
多少个方法等等,这就需要读者通过在实际的开发中就实际问题分析设计和总结了。
类的定义:
class 类名{
}
使用一个关键字class 和后面加上一个你想要的类名以及加上一对大括号,这样一个类的结构就定义出来了,只要在里面写代码就可以了,但是里面写什么?能写什么?怎样写才是
一个完整的类呢?上面讲过来,使用类是为了让它实例出对象来给我们用,这就要知道你想要的是什么样的对象了,像上面我们讲的一个装机配置单上写什么,你装出来的机子就有什
么。比如说,一个人就是一个对象,你怎么把一个你看好的人推荐给你们领导呢?当然是越详细越好了:
首先,你会介绍这个人姓名、性别、年龄、身高、体重、电话、家庭住址等等。
然后,你要介绍这个人能做什么,可以开车,会说英语,可以使用电脑等等。只要你介绍多一点,别人对这个人就多一点了解,这就是我们对一个人的描述,现在我
们总结一下,所有的对象我们用类去描述都是类似的,从上面人的描述可以看到,做出一个类来,从定义的角度分两部分,第一是从静态上描述,第二是从动态上描述,静态上的描述
就是我们所说的属性,像上面我们看到的,人的姓名、性别、年龄、身高、体重、电话、家庭住址等等。
动态上也就是人的这个对象的功能,比如这个人可以开车,会说英语,可以使用电脑等等,抽象成程序时,我们把动态的写成函数或者说是方法,函数和方法是一样的。所以,所有类
都是从属性和方法这两方面去写,属性又叫做这个类的成员属性,方法叫做这个类的成员方法。
class 人{
成员属性:姓名、性别、年龄、身高、体重、电话、家庭住址
成员方法:可以开车,会说英语,可以使用电脑
}
属性:
通过在类定义中使用关键字"var"来声明变量,即创建了类的属性,虽然在声明成员属性的时候可以给定初始值,但是在声明类的时候给成员属性初始值是没有必要的,比如说要是把
人的姓名赋上“张三”,那么用这个类实例出几十个人,这几十个人都叫张三了,所以没有必
要,我们在实例出对象后给成员属性初始值就可以了。
如:var $somevar;
方法(成员函数):
通过在类定义中声明函数,即创建了类的方法。
如:function somefun(参数列表)
{ ... ... }
代码片段

<?php 
class Person{ 
//下面是人的成员属性 
var $name; //人的名字 
var $sex; //人的性别 
var $age; //人的年龄 
//下面是人的成员方法 
function say(){ 
//这个人可以说话的方法 
echo "这个人在说话"; 
} function run(){ 
//这个人可以走路的方法 
echo "这个人在走路"; 
} 
} 
?>

上面就是一个类的声明,从属性和方法上声明出来的一个类,但是成员属性最好在声明
的时候不要给初始的值,因为我们做的人这个类是一个描述信息,将来用它实例化对象,比
如实例化出来10 个人对象,那么这10 个人,每一个人的名字、性别、年龄都是不一样的,
所以最好不要在这个地方给成员属性赋初值,而是对每个对象分别赋值的。
用同样的办法可以做出你想要的类了,只要你能用属性和方法能描述出来的实体都可以
定义成类,去实例化对象。
为了加强你对类的理解,我们再做一个类,做一个形状的类,形状的范围广了点,我们
就做个矩形吧,先分析一下,想一想从两方面分析,矩形的属性都有什么?矩形的功能都有
什么?
class 矩形 
{ 
//矩形的属性 
矩形的长; 
矩形的宽; 
//矩形的方法 
矩形的周长; 
矩形的面积; 
}

代码片段
<?php 
class Rect{ 
var $kuan; 
var $gao; 
function zhouChang(){ 
计算矩形的周长; 
} function mianJi(){ 
计算矩形的面积; 
} 
} 
?>

如果用这个类来创建出多个矩形对象,每个矩形对象都有自己的长和宽,都可以求出自
己的周长和面积了。
类的声明我们就到这里吧!!
PHP 相关文章推荐
在任意字符集下正常显示网页的方法一
Apr 01 PHP
深入php函数file_get_contents超时处理的方法详解
Jun 03 PHP
探讨如何在PHP开启gzip页面压缩实例
Jun 09 PHP
php 模拟post_验证页面的返回状态(实例讲解)
Oct 28 PHP
thinkPHP实现瀑布流的方法
Nov 29 PHP
PHP使用ODBC连接数据库的方法
Jul 18 PHP
如何使用纯PHP实现定时器任务(Timer)
Jul 31 PHP
php 利用socket发送HTTP请求(GET,POST)
Aug 24 PHP
php实现mysql数据库连接操作及用户管理
Nov 08 PHP
CodeIgniter生成静态页的方法
May 17 PHP
解决php-fpm.service not found问题的办法
Jun 06 PHP
php实现分页功能的详细实例方法
Sep 29 PHP
PHP5 操作MySQL数据库基础代码
Sep 29 #PHP
PHP 字符截取 解决中文的截取问题,不用mb系列
Sep 29 #PHP
php 生成饼图 三维饼图
Sep 28 #PHP
php 不同编码下的字符串长度区分
Sep 26 #PHP
php 应用程序安全防范技术研究
Sep 25 #PHP
从Web查询数据库之PHP与MySQL篇
Sep 25 #PHP
php 服务器调试 Zend Debugger 的安装教程
Sep 25 #PHP
You might like
PHP 中的批处理的实现
2007/06/14 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
2017/05/04 PHP
推荐dojo学习笔记
2007/03/24 Javascript
javascript 按回车键相应按钮提交事件
2009/11/02 Javascript
ExtJs扩展之GroupPropertyGrid代码
2010/03/05 Javascript
asp.net+js 实现无刷新上传解析csv文件的代码
2010/05/17 Javascript
JSON传递bool类型数据的处理方式介绍
2013/09/18 Javascript
js/jquery判断浏览器的方法小结
2014/09/02 Javascript
使用Nodejs开发微信公众号后台服务实例
2014/09/03 NodeJs
js实现同一页面可多次调用的图片幻灯切换效果
2015/02/28 Javascript
高效Web开发的10个jQuery代码片段
2016/07/22 Javascript
利用jquery实现验证输入的是否是数字、小数,包含保留几位小数
2016/12/07 Javascript
angular.js指令中的controller、compile与link函数的不同之处
2017/05/10 Javascript
基于Cookie常用操作以及属性介绍
2017/09/07 Javascript
JS闭包经典实例详解
2018/12/20 Javascript
vue 实现移动端键盘搜索事件监听
2019/11/06 Javascript
vue-cli3自动消除console.log()的调试信息方式
2020/10/21 Javascript
vue使用exif获取图片经纬度的示例代码
2020/12/11 Vue.js
nestjs返回给前端数据格式的封装实现
2021/02/22 Javascript
[02:44]重置世界,颠覆未来——DOTA2 7.23版本震撼上线
2019/12/01 DOTA
Python利用正则表达式匹配并截取指定子串及去重的方法
2015/07/30 Python
python 计算两个日期相差多少个月实例代码
2017/05/24 Python
python实现微信发送邮件关闭电脑功能
2018/02/22 Python
pandas中apply和transform方法的性能比较及区别介绍
2018/10/30 Python
Python设计模式之工厂方法模式实例详解
2019/01/18 Python
Django打印出在数据库中执行的语句问题
2019/07/25 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
2019/09/29 Python
单位委托书范本
2014/04/04 职场文书
公司活动总结范文
2014/07/01 职场文书
药店促销活动策划方案
2014/08/24 职场文书
领导干部“四风”查摆问题个人整改措施
2014/10/28 职场文书
师德培训心得体会2016
2016/01/09 职场文书
2016党员干部廉政准则学习心得体会
2016/01/20 职场文书
用Python将库打包发布到pypi
2021/04/13 Python
pandas中DataFrame重置索引的几种方法
2021/05/24 Python
mysql如何配置白名单访问
2021/06/30 MySQL