PHP学习笔记——9.面向对象
1.概述
①面向对象(OOP)
面向对象编程是一种计算机编程架构
基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成
需要达到三个主要目标:重用性、灵活性和扩展性
面向对象的三大特点(封装,继承,多态)缺一不可
而“基于对象”是指只能使用已封装好的对象,无法派生出新的对象类型
②类与对象
类描述了一组有相同特性(属性)和相同行为(方法)的对象;它为属于该类的所有对象提供了统一的抽象描述
类就是一种数据类型,而面向对象与面向过程最大的区别就在于可以根据需求进行自定义数据类型
对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位
③属性与方法
属性 -> 该类有什么(名词) -> 即为‘变量‘
方法 -> 该类能干什么(动词) -> 即为‘函数‘
2.声明及应用
①基础语法
class 类名 {
public $属性名[ = ‘属性值‘];
public function 方法名() {
echo $this -> 属性名/方法名();
}
}
$对象 = new 类名();
$对象 -> 属性名[ = ‘新属性值‘];
$对象 -> 方法名();
注意:
类名通常单词首字母大写,如ActionClass
属性值必须为直接值,不能是表达式或函数返回值
方法内可直接调用类外部普通函数;不可调用外部变量
②权限修饰
可在属性名/方法名前添加public/protected/private进行修饰;
若不加,则默认为public方式
访问/修改的权限为:
public protected private
本类中 √ √ √
子类中 √ √ X
外部 √ X X
3.三大特征
①封装
定义:
隐藏属性和方法的实现细节,仅对外公开接口;
控制程序中属性/方法的读、修改的访问级别
语法:
class 类名 {
private $属性名[ = ‘属性值‘];
private function 方法名 () {
方法体;
}
public function 公共方法名 () {
方法体; //对private属性/方法进行操作
}
}
$对象 = new 类名();
$对象 -> 公共方法名();
②继承
定义:
一个类以某“一个”类作为父类
在继承父类的所有属性和方法的基础上,做进一步的增加或修改
语法:
class 子类 extents 父类 {
属性/方法;
}
注意:
子类中访问父类的public/protected方法(包括构造方法/静态方法),需使用parent::方法名();
子类中访问父类的private方法,需通过访问访问父类的public方法间接进行
子类在对父类的属性/方法进行重写(override)时,权限只能放宽松或保持不变
重载(overload):
指在一个类中存在多个同名方法(参数类型或数量不同);
在调用时,会根据传入的参数,调用相对应的方法
PHP中不允许出现同名方法,但可通过func_get_args()方法获取传入的参数,
进行判断模拟出重载效果
注:func_get_args()方法返回的是数组类型
③多态
定义:
在强类型语言中,方法的参数在声明时是什么类型,传参时也必须是该类型
为了具有灵活多变的特性,让参数类型由传入的子类参数类型来决定
而PHP是弱类型语言,对类型没有任何的限制,传参时可使用任意类型的数据
反而使程序不够严谨,则需要做一定的限制,来形成完善的多态
语法:
class 类名 {
public function 方法名(父类 $变量){
方法体;
}
}
class 父类 { //用于对类型做限制
}
class 子类1 extents 父类 {
public function 子类方法名() {
方法体;
}
}
class 子类2 extents 父类 {
public function 子类方法名() {
方法体;
}
}
$对象 = new 类名();
$对象1 = new 子类1();
$对象2 = new 子类2();
$对象 -> 方法名($对象1);
$对象 -> 方法名($对象2); //相同的方法因传入的参数不同而产生不同作用
作者:@zhnoah
出处:http://www.cnblogs.com/zhnoah/
本文版权归本人和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连
接,否则保留追究法律责任的权利。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。