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 相关文章推荐
?生?D片??C字串
Dec 06 PHP
PHP中的日期处理方法集锦
Jan 02 PHP
php判断是否为json格式的方法
Mar 04 PHP
php强制运行广告的方法
Dec 01 PHP
如何使用php脚本给html中引用的js和css路径打上版本号
Nov 18 PHP
yii2中添加验证码的实现方法
Jan 09 PHP
Yii2框架BootStrap样式的深入理解
Nov 07 PHP
PHP正则表达式匹配替换与分割功能实例浅析
Feb 04 PHP
thinkPHP5.0框架URL访问方法详解
Mar 18 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
Aug 05 PHP
thinkphp框架表单数组实现图片批量上传功能示例
Apr 04 PHP
PHP 自动加载类原理与用法实例分析
Apr 14 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连接mysql数据库代码
2009/03/10 PHP
几款免费开源的不用数据库的php的cms
2010/12/19 PHP
php中sql注入漏洞示例 sql注入漏洞修复
2014/01/24 PHP
php中$_GET与$_POST过滤sql注入的方法
2014/11/03 PHP
php基于curl扩展制作跨平台的restfule 接口
2015/05/11 PHP
用jquery生成二级菜单的实例代码
2013/06/24 Javascript
Javascript实现返回上一页面并刷新的小例子
2013/12/11 Javascript
js设置cookie过期当前时间减去一秒相当于立即过期
2014/09/04 Javascript
JS组件Bootstrap dropdown组件扩展hover事件
2016/04/17 Javascript
浅谈javascript中关于日期和时间的基础知识
2016/07/13 Javascript
微信小程序loading组件显示载入动画用法示例【附源码下载】
2017/12/09 Javascript
详解为生产环境编译Angular2应用的方法
2018/12/10 Javascript
javascript中call,apply,callee,caller用法实例分析
2019/07/24 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
2019/10/15 Javascript
在vue中使用image-webpack-loader实例
2020/11/12 Javascript
[05:15]2018年度CS GO社区贡献奖-完美盛典
2018/12/16 DOTA
python实现发送邮件功能
2017/07/22 Python
1分钟快速生成用于网页内容提取的xslt
2018/02/23 Python
Python中的heapq模块源码详析
2019/01/08 Python
python三方库之requests的快速上手
2019/03/04 Python
python实现对图片进行旋转,放缩,裁剪的功能
2019/08/07 Python
Python 实现大整数乘法算法的示例代码
2019/09/17 Python
python 图片二值化处理(处理后为纯黑白的图片)
2019/11/01 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
Spring @Enable模块驱动原理及使用实例
2020/06/23 Python
keras K.function获取某层的输出操作
2020/06/29 Python
一款纯css3实现的鼠标经过按钮特效教程
2014/11/09 HTML / CSS
美国最受欢迎的度假租赁网站:VRBO
2016/08/02 全球购物
请描述一下”is a”关系和”has a”关系
2015/02/03 面试题
亲子读书活动方案
2014/02/22 职场文书
心理健康日活动总结
2014/05/08 职场文书
房地产营销活动策划方案
2014/09/15 职场文书
2014年连锁店圣诞节活动方案
2014/12/09 职场文书
放假通知怎么写
2015/08/18 职场文书
Python 快速验证代理IP是否有效的方法实现
2021/07/15 Python
JavaScript实现两个数组的交集
2022/03/25 Javascript