文章目录
PHP面向对象基础
一、引入
面向对象的编程的基本构成便是“过程”,过程实现的方式就是“函数”,我们通过不同函数来实现不同的功能,并按照程序的执行顺序调用相应的函数,组成一个完整的可以运行的应用程序,我们可以通过把不同的功能在不同的函数中实现或者给函数传递不同的参数来实现不同的功能,这是面向过程中模块化设计的原理。
但是面向过程有很多问题,当我们总是按照教科书上的小例子来学习程序设计时是永远也体会不到面向过程中存在的这些问题的,反而会觉得面向过程更简单,更容易理解。而事实是当我们设计一些大型的应用的时候将会发现使用面向过程编程是多么的痛苦和无奈,代码极难维护,我们不得不为相似功能设计不同的函数,天长日久,代码是越来越大,函数越来越多,而重复的代码越来越多,噩梦就此产生。
于是产生了另外一种程序设计思想:面向对象,从此程序员发现编程是多么快乐的一件事情,我们可以把现实世界的很多哲学思想或者模型应用于编程,这是计算机的一次伟大的革命。那么究竟何为面向对象?
基于PHP来进行通用的面向对象的编程和演示,进而对其他编程语言(如Java、Python、C#、C++等)进行举一反三。
二、什么是面向对象
OOP (Object-Orientied Programming):将现实世界的各类物体 特性 和 行为 用编程语言进行抽象表达,具备比面向过程更加高级的特性
1.何为类
class 类就是一类东西,一类事物的统称,比如“门”是一类东西,“防盗门” “汽车门” 也是一类东西,“人” “男人” “女人” 等,因为同类有相同的特性和行为。
门的特性:材料,高度,宽度,样式,颜色…
门的行为:打开,关闭,上锁…
2.何为实例
instance 实例就是明确告知哪一类东西的哪一个,比如“小明家的入户门”,或者“车牌为A12345的汽车的左前门”就属于一个实例。
3.何为对象
在面向对象的程序设计中,"一切皆对象”(对面向对象理解得有多深取决于对这句话的理解有多深)。一个类是一个对象,一个实例是一个对象,一个变量也是一个对象,甚至一个数据类型,也都可以视为一个对象。
4.对象有什么特征
对象不同于过程的最基本的特征有两点:
- 对象有方法:比如门可以“开",可以“关”,可以“锁”,这些属于方法,也称为对象的行为。
- 对象有属性:比如门有“宽度”,“高度”,“厚度”,“重量”等,这些属于属性,或称为特征。
对于属性,这在面向过程中是类似于变量,而对于方法,方法本身来说就是一段处理程序,方法与面向过程的函数其实是类似的(方法和函数都由一段代码组成,可以包括参数,可以有返回值或没有返回值),它们之间唯一的区别在于函数是不存在公有私有一说的,而方法却有访问修饰符(public,private,protected等),这种类型修饰符直接决定了该方法能不能被别的子对象便用。
5.何为子对象呢
这里牵涉着面向对象另一个非常重要的特性:继承,简单理解继承就是“子承父业”,与生物学上的继承,遗传的概念没有区别。就拿人类来说,父亲有的方法(如走,跑,跳,吃,睡等)同样儿子也可以有,儿子还可以自创一个自己的方法(如射击,冲浪,骑车)。
6.多态
现实生活中还有一个很有趣的现象是:父亲是儿子的父亲,同样父亲也是爷爷的儿子,所以父亲这个对象它有时候也是儿子,那么还有可能是丈夫………,这表示一个对象可以有多种形态,这就是“多态”
关于面向对象的基本概念在此总结如下:
- 世间万物皆为对象
- 类表示一类事物
- 实例表明类的真实存在
- 对象有方法和属性
- 对象可以被继承
- 对象有多种形态
四、封装、继承、多态
1.封装
<?php
/**
* 封装:public private protected
* 1.默认情况下,所有属性和方法,在没有明确设置访问修饰符时,均为public
* 2.private 表示类私有,被定义的属性只有在类的定义代码中才可以使用,类的实例和子类中均无法使用
* 3.protected 表示受类的保护,示例中不能直接使用,但是在子类中可以使用
*/
class people{
// 在类中,这些东西叫做属性
// 定义类时,可以给属性设置一个初始值
// 使用了访问修饰符后,就不再需要 var
private $name = 'ymq';
var $age = '';
var $addr =