# 第十七章 面向对象基础
**学习要点:**
1.什么是面向对象
2.OOP 的特点
3.关键的OOP 概念
4.创建OOP
许多语言本身就是面向对象(OOP)的,而PHP 用了几年才引入了这类功能。面向对
象的诞生是开发范型一次的重大改变,编程的注意力重新从应用程序的逻辑回到其数据上
来。换句话说,OOP 将焦点从编程的过程性事件转向最终建模的真实实体。这使得应用程
序更接近于我们周围的现实世界。
**一.什么是面向对象**
**面向过程**
这就好比你是公司的一名员工,今天有个任务要在公司组装一批电脑。那么你就开始采
购、讨价还价、运输回公司、开始组装、布线网络、调试机器、完成。也就是说,面向过程
就是具体化的实现,细节明确。
**面向对象**
这就好像你是公司的总裁,你布置给一名员工一个组装一批电脑的任务。完毕。也就是
说,面向对象就是抽象化的执行,具体还是由那名员工来完成。而细节方面,总裁不需要去
考虑。这样的好处是显而易见的,在有管理高层的公司可以协调作业,而没有管理高层的公
司,只有一些具体实现功能的员工,会乱做一团。
**二.OOP的特点**
**封装**
隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级
别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与
操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。
**继承**
继承是从一个基类得到一个或多个类的机制。
继承自另一个类的类被称为该类的子类。这种关系通常用父亲和孩子来比喻。子类将继
承父类的特性。这些特性由属性和方法组成。子类可以增加父类之外的新功能,因此子类也
被称为父类的“扩展”。
**多态**
多态是指OOP 能够根据使用类的上下文来重新定义或改变类的性质或行为,或者说接
口的多种不同的实现方式即为多态。把不同的子类对象都当作父类来看,可以屏蔽不同子类
对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
**三.关键的 OOP概念**
**类(class)**
类是对某个对象的定义。它包含有关对象动作方式的信息,包括它的名称、方法、属性
和事件。实际上它本身并不是对象,因为它不存在于内存中。当引用类的代码运行时,类的
一个新的实例,即对象,就在内存中创建了。虽然只有一个类,但能从这个类在内存中创建
多个相同类型的对象。
**对象(object)**
对象是一件事、一个实体、一个名词,可以获得的东西,可以想象有自己的标识的任何
东西。对象是类的实例化。一些对象是活的,一些对象不是。
比如这辆汽车、这个人、这间房子、这张桌子、这株植物、这张支票、这件雨衣。概
括来说就是:一切皆对象。
例如:类是对象的抽象定义,说白了,如果这个对象是电脑,类可以创建出许多对象,
类可以生成很多电脑,再白一点,类可以当成一个电脑生产厂,可以生成出很多很多台电脑。
**字段(filed)**
字段是用于描述类的某方面的性质,它与一般的PHP 变量非常相似,只是有一些细微
的差别。
例如:电脑品牌,电脑的型号等特性。
**属性(attribute)**
通过方法来访问和操作字段,一方面可以保护字段,同时还允许访问公共字段一样访问
数据。
例如:获取电脑品牌,设置电脑品牌等操作。
**方法(method)**
方法与函数非常相似,只不过方法是用来定义类的行为。与函数一样,方法可以接受输
入参数,可以向调用者返回一个值。
例如:打开电脑,输入文本,运行程序。
**四.创建 OOP**
**类的创建:**
```
class Computer { //类的字段(成员)
//类的方法
}
```
**对象的声明:**
```
$computer = new Computer();
```
new 标识符是为了在内测中创建一个对象(实例),而Computer()就是那个类所生
成的实例。
$computer 是一个变量,而且又是生成实例的引用。
有时,你可能需要创建多个对象。
```
$computer2 = new Computer();
```
![](https://box.kancloud.cn/2016-05-17_573b067888732.png)
使用var_dump()函数可以打印变量的相关信息。
**字段(成员)的添加:**
```
class Computer {
//类的字段(成员)
public $_name = '联想120';
public $_model = 'LX';
}
```
**1.声明字段:**
```
public $_name = '联想120'
```
a) public 是修饰符,表示这是一个公共字段,可以通过外部直接访问。
b) $_name 是变量名。
c) '联想120'是变量的值。
**2.读取字段**
```
echo $computer->_name;
```
**3.设置字段**
```
$computer->_name = 'IBM110';
```
**方法的创建**
```
class Computer { //类的方法
function run() { echo '我成功的运行了!';
}
}
```
**执行方法**
```
$computer->run();
```
也可以在方法添加一些参数,执行的时候,传入这些参数。
```
class Computer { //类的方法
function run($_what) { echo $_what . '成功的运行了!';
}
} $computer = new Computer (); $computer->run('电脑');
```
**构造方法**
所谓构造方法,也是方法,只不过是一种特殊的方法。而方法名必须和类名一致,
并且不需要像普通方法一样,必须通过调用才能执行,只需要实例化即完成调用过程。
一般来说,构造方法总是在做一些初始化的工作。
```
class Computer { //构造方法
function Computer() { echo '我是构造方法!';
}
} new Computer (); //这样即完成了调用
```
在PHP5 我们可以通过__construct 的内置方法来识别构造方法,而不用再需要和
类名相同了。
```
class Computer { //构造方法
function __construct() { echo '我是构造方法!';
}
}
```
相对应构造方法,还有一种内置的方法是析构方法,它的用途在整个类使用完毕都
执行。一般可用于清理内存中对象(脚本执行完毕的时候会自动清理)。而如果有脚本执
行完毕后并没有清理的,比如数据库数据等,就有必要使用析构方法。
```
class Computer { //析构方法
function __destruct() { echo '我是析构方法';
}
}
```
**注:文章出自李炎恢PHP视频教程,本文仅限交流使用,不得用于商业用途,否则后果自负。**
- 介绍
- HTML/CSS 教程
- 第 1 章 HTML5 概述
- 第 2 章 基本格式
- 第 3 章 文本元素
- 第 4 章 超链接和路径
- 第 5 章 分组元素
- 第 6 章 表格元素
- 第 7 章 文档元素
- 第 8 章 嵌入元素
- 第 9 章 音频和视频
- 第 10 章 表单元素[上]
- 第 10 章 表单元素[中]
- 第 10 章 表单元素[下]
- 第 11 章 全局属性和其他
- 第 12 章 CSS 入门
- 第 13 章 CSS 选择器[上]
- 第 14 章 CSS 颜色与度量单位
- 第 15 章 CSS 文本样式[上]
- 第 15 章 CSS 文本样式[下]
- 第 16 章 CSS 盒模型[上]
- 第 16 章 CSS 盒模型[下]
- 第 17 章 CSS 边框与背景[上]
- 第 17 章 CSS 边框与背景[下]
- 第 18 章 CSS 表格与列表
- 第 19 章 CSS 其他样式
- 第 20 章 CSS3 前缀和 rem
- 第 21 章 CSS3 文本效果
- 第 21 章 CSS3 文本效果
- 第 23 章 CSS3 边框图片效果
- 第 24 章 CSS3 变形效果[下]
- 第 25 章 CSS3 过渡效果
- 第 26 章 CSS3 动画效果
- 第 27 章 CSS 传统布局[上]
- 第 27 章 CSS 传统布局[下]
- 第 28 章 CSS3 多列布局
- 第 29 章 CSS3 弹性伸缩布局[上]
- 第 29 章 CSS3 弹性伸缩布局[中]
- 第 29 章 CSS3 弹性伸缩布局[下]
- 第 30 章 使用 Emmet 插件
- Bootstrap 教程
- 第 1 章 Bootstrap 介绍
- 第 2 章 排版样式
- 第 3 章 表格和按钮
- 第 4 章 表单和图片
- 第 5 章 栅格系统
- 第 6 章 辅组类和响应式工具
- 第 7 章 图标菜单按钮组件
- 第 8 章 输入框和导航组件
- 第 9 章 路径分页标签和徽章组件
- 第 10 章 巨幕页头缩略图和警告框组件
- 第 11 章 进度条媒体对象和 Well 组件
- 第 12 章 列表组面板和嵌入组件
- 第 13 章 模态框插件
- 第 14 章 下拉菜单和滚动监听插件
- 第 15 章 标签页和工具提示插件
- 第 16 章 弹出框和警告框插件
- 第 17 章 按钮和折叠插件
- 第 18 章 轮播插件
- 第 19 章 附加导航插件
- 第 20 章 项目实战--响应式导航[1]
- 第 20 章 项目实战--响应式轮播图[2]
- 第 20 章 项目实战--首页内容介绍[上][3]
- 第 20 章 项目实战--首页内容介绍[下][4]
- 第 20 章 项目实战--资讯内容[5,6]
- 第 20 章 项目实战--案例和关于[7]
- javaScript 教程
- javascript快速入门1--JavaScript前世今生,HelloWorld与开发环境
- javascript快速入门2--变量,小学生数学与简单的交互
- javascript快速入门3--分支判断与循环
- javascript快速入门4--函数与内置对象
- javascript快速入门5--数组与对象
- javascript快速入门6--Script标签与访问HTML页面
- javascript快速入门7--ECMAScript语法基础
- javascript快速入门8--值,类型与类型转换
- javascript快速入门9--引用类型
- javascript快速入门10--运算符,语句
- javascript快速入门11--正则表达式
- javascript快速入门12--函数式与面向对象
- javascript快速入门13--BOM——浏览器对象模型(Browser Object Model)
- javascript快速入门14--DOM基础
- javascript快速入门15--节点
- javascript快速入门15--表单
- javascript快速入门16--表格
- javascript快速入门17--事件
- javascript快速入门18--样式
- javascript快速入门19--定位
- javascript快速入门20--Cookie
- javascript快速入门21--DOM总结
- javascript快速入门22--Ajax简介
- javascript快速入门23--XHR—XMLHttpRequest对象
- javascript快速入门24--XML基础
- javascript快速入门25--浏览器中的XML
- javascript快速入门26--XPath
- javascript快速入门27--XSLT基础
- PHP 教程
- 第一章 如何加载运行已发布的PHP项目
- 第二章 PHP基础
- 第三章 操作符与控制结构
- 第四章 数学运算
- 第五章 数组
- 第六章 目录与文件
- 第七章 自定义函数
- 第八章 字符串处理
- 第九章 正则表达式
- 第十章 日期与时间
- 第十一章 表单与验证
- 第十二章 会话控制
- 第十三章 上传文件
- 第十四章 处理图像
- 第十五章 MySQL 数据库
- 第十六章 PHP 操作MySQL
- 第十七章 面向对象基础
- 第十八章 面向对象的特性
- 第十九章 面向对象的工具