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 相关文章推荐
Apache2 httpd.conf 中文版
Nov 17 PHP
用PHP 快速生成 Flash 动画的方法
Mar 06 PHP
phpmyadmin里面导入sql语句格式的大量数据的方法
Jun 05 PHP
PHPnow安装服务[apache_pn]失败的问题的解决方法
Sep 10 PHP
使用php计算排列组合的方法
Nov 13 PHP
PHP处理会话函数大总结
Aug 05 PHP
php构造函数与析构函数
Apr 23 PHP
php基于mcrypt_encrypt和mcrypt_decrypt实现字符串加密解密的方法
Jul 12 PHP
Yii 2.0自带的验证码使用经验分享
Jun 19 PHP
详解PHP如何更好的利用PHPstorm的自动提示
Aug 18 PHP
PHP利用DWZ.CN服务生成短网址
Aug 11 PHP
PHP中用Trait封装单例模式的实现
Dec 18 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&amp;MYSQL分页原理及实现
2007/01/02 PHP
php下使用curl模拟用户登陆的代码
2010/09/10 PHP
php开发文档 会员收费1期
2012/08/14 PHP
对于PHP 5.4 你必须要知道的
2013/08/07 PHP
codeigniter使用技巧批量插入数据实例方法分享
2013/12/31 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
2015/12/29 PHP
php格式化时间戳
2016/12/17 PHP
PHP数据库处理封装类实例
2016/12/24 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
2018/10/14 PHP
Mootools 1.2教程 排序类和方法简介
2009/09/15 Javascript
基于jQuery+HttpHandler实现图片裁剪效果代码(适用于论坛, SNS)
2011/09/02 Javascript
setInterval()和setTimeout()的用法和区别示例介绍
2013/11/17 Javascript
jQuery中next()方法用法实例
2015/01/07 Javascript
Node.js 学习笔记之简介、安装及配置
2015/03/03 Javascript
javascript中tostring()和valueof()的用法及两者的区别
2015/11/16 Javascript
jQuery xml字符串的解析、读取及查找方法
2016/03/01 Javascript
Node.js利用debug模块打印出调试日志的方法
2017/04/25 Javascript
bootstrap select下拉搜索插件使用方法详解
2017/11/23 Javascript
React路由管理之React Router总结
2018/05/10 Javascript
详解Vue中watch对象内属性的方法
2019/02/01 Javascript
微信小程序视图控件与bindtap之间的问题的解决
2019/04/08 Javascript
[02:18]《我与DAC》之工作人员:为了热爱DOTA2的玩家们
2018/03/28 DOTA
python中 ? : 三元表达式的使用介绍
2013/10/09 Python
Python3.4 tkinter,PIL图片转换
2018/06/21 Python
Python实现的tcp端口检测操作示例
2018/07/24 Python
Python异步操作MySQL示例【使用aiomysql】
2019/05/16 Python
python 判断linux进程,并杀死进程的实现方法
2019/07/01 Python
如何基于python生成list的所有的子集
2019/11/11 Python
关于numpy.where()函数 返回值的解释
2019/12/06 Python
python中的线程threading.Thread()使用详解
2019/12/17 Python
html5的localstorage详解
2017/05/09 HTML / CSS
俄罗斯运动、健康和美容产品在线商店:Lactomin.ru
2020/07/23 全球购物
医学院学生求职简历的自我评价
2013/10/24 职场文书
计算机应用专业推荐信
2013/11/13 职场文书
七年级英语教学反思
2014/01/15 职场文书
解决Jenkins集成SonarQube遇到的报错问题
2021/07/15 Java/Android