PHP面向对象开发的学习笔记
传统开发方法存在的问题:
面向对象的要素
class MyPc{
public $name;
var $price;
function vod() {
return “PHP100视频教程”;
}
}
$pc1 = new MyPc();
$pc1->name;
封装 关键字 :public,protected,private
封装相关函数:__set() , __get()
某些特定操作的时候需要访问和赋值封装的类型,这个时候我们就需要其他的
函数帮我们完成这些操作,PHP为我们提供了个方法名:__set() , __get()
继承
1、关键字 :final
用来定义类和方法的一个重要关键字,当定义类的时候该类将不能被继承,当用来定义方法的时候该方法将不能被重载
2、关键字 : self
用来用类访问当前类中的内容的关键字,类似与$this关键字,但$this是需要类实例化以后才可以使用,self 可以直接访问当前类中的内部成员
注意:因为没有实例化类访问内部属性或者方法是没有意义的,所以self一般用来访问类中的:静态成员,常量,或者其他定义内容
3、关键字 :static
用来定义类的静态属性或方法,可以在类未被实例化时使用,静态属性单独占用内存而不会因创建多个对象时而导致同样的方法或者属性重复占用。
静态方法内部禁止出现非静态内容,如function等
4、关键字 :const
用来定义类中的常量,类似PHP外部定义常量的关键字define(); Const只能修饰类当中的成员属性!
注意事项:1、建议大写常量 2、常量不使用$符号
类的抽象方法和类
1、抽象关键字 :abstract
2、抽象方法和抽象类的定义
3、抽象类和方法使用规则
抽象就是无法确切的说明,但又有一定的概念或者名称,在PHP中声明一个抽象
类或者方法我们需要使用adstract关键字
一个类中至少有一个方法是抽象的,我们称之为抽象类。
所以如果定义抽象类首先定义抽象方法。
1、类中至少有一个抽象方法
2、抽象方法不允许有{ }
3、抽象方法前面必须要加abstract
抽象类的几个特点:
1、不能被实例化,只能被继承
2、继承的派生类当中要把所以抽象方法重载才能实例化
接口:(一种特殊的抽象类)
1、接口的介绍与创建
接口:一种成员属性全部为抽象的特殊抽象类,在程序中同为规范的作用
区别:
抽象类
1、类中至少有一个抽象方法
2、抽象方法前需加abstract
接口:
1、类中全部为抽象方法
2、抽象方法前不用加abstract
3、接口抽象方法属性为public
4、成员属性必须为常量
共同点:
1、本身都不能被实例化,必须被继承或者引用
2、继承或者引用后,需要把所有抽象方法重载方可使用
接口有自己的创建关键字:interface 与普通类的创建类似,对象方法全部为抽象方法,前面无须加adstract
interface demo {
const NAME=”名字”;
function Fun1();
function Fun2();
}
2、接口的引用与规范
接口引用区别与之前我们的学的类继承关键字 extends,继承只能是单一性,而接口可以使用关键字:implements 多个引用并用逗号 , 分开.
1、普通类引用接口例子:
class mypc implements demo , demo2 , demo3{
……
}
2、抽象类引用接口例子:
abstract class mypc implements demo , demo2 , demo3{
……
}
2、接口的引用与规范
3、继承父类引用接口并存例子:先继承后接口,单继承多接口
class mypc extends root implements demo , demo2 , demo3{
……
}
4、接口与接口继承:
interface demo3 extends demo{
……
}
抽象类和接口的主要区别和适用地方:
抽象方法是必须实现的方法。就象动物都要呼吸。但是鱼用鳃呼吸,猪用肺呼吸。 动物类要有呼吸方法。怎么呼吸就是子类的事了。
现在有很多讨论和建议提倡用interface代替abstract类,两者从理论上可以做一般性的混用,但是在实际应用中,他们还是有一定区别的。
抽象类一般作为公共的父类为子类的扩展提供基础,这里的扩展包括了属性上和行为上的。
而接口一般来说不考虑属性,只考虑方法,使得子类可以自由的填补或者扩展接口所定义的方法,就像事件中的适配器就是一个很好的应用。
用一个简单的例子,比如说一个教师,我们把它作为一个抽象类,有自己的属性,比如说年龄,教育程度,教师编号等等,而教师也是分很多种类的,我们就可以继承教师类而扩展特有的种类属性,而普遍属性已经直接继承了下来。
而接口呢~还是拿教师做例子,教师的行为很多,除了和普通人相同的以外,还有职业相关的行为,比如改考卷,讲课等等,我们把这些行为定义成无body的方法,作为一个集合,它是一个interface。而教师张三李四的各自行为特点又有不同,那么他们就可以扩展自己的行为body。从这点意义上来说, interface偏重于行为。
总之,在许多情况下,接口确实可以代替抽象类,如果你不需要刻意表达属性上的继承的话。
多态:
多态性是继抽象和继承后,面向对象语言的第三个特征。从字面上理解,多态的意思是“多种形态”,简单来说,多态是具有表现多种形态的能力的特征,在OO中是指“语言具有根据对象的类型以不同方式处理。OOP的模式并不仅仅是把很多函数和功能集合起来,目的而是使用类,继承,多态的方式描述我们生活中的一种情况。从而使得我们的代码更具有“物”的意义。帮助我们减少一些重复性的代码和条件语句的判断。
运算符 :instanceof是PHP 一个类型运算符。instanceof 用来测定一个给定的对象是否来自指定的对象类。
2、1、对象描述的配置
2、对象方法的异常处理
3、克隆对象的应用
4、自动载入对象的方法
1、对象描述的配置
方法名 __tostring() 直接打印对象句柄,从而获得该方法的基本信息或其他内容
方法名 __call($funname,$arr_value) 调用一些不存在的对象方法的异常处理,使程序继续正常运行。方法名 __clone() 关键字 clone 通过克隆的方式我们可以在内存中生成两个一样的对象或升级原对象
方法名 __autoload() 自动载入对象的方法,快速取得对象名称并自动载入进当前页面