封装

封装,继承,多态是面向对象的三大特性,本文总结一下 php 是如何实现这三大特性的

封装创建类普通类

classclassName{public$attribute1//成员属性//成员方法functionfun1(){echo"method1"}}抽象类

abstractclassclassName1{//抽象方法abstractpublicfunctionfun1();abstractprivatefunctionfun2();abstractprotectedfunctionfun3();}

抽象类至少有一个抽象方法

抽象类不能被实例化,只能被继承 extends

继承的派生类要把所有方法重载才能实例化对象

接口

可以看做是一种成员属性全部为抽象的抽象类,用作定义规范(面向接口编程)

interfaceIName{constNAME;functionfun1();}

接口中方法 必须全为 抽象方法

接口中成员方法和属性为 public

接口成员属性必须为常量

接口不能被实例化,只能被引用 implement

被引用后,派生类不许把所有方法重载才能实例化对象

new 关键字

实例化对象,使用 -> 访问对象内容 (成员属性和成员方法)

$instance1=newclassName;//实例化对象$instance1->attribute1;//访问成员属性$instance1->method1();//访问成员方法封装关键字 public, protected, private作用域publicprotectedprivate全局YesNoNo继承类YesYesNo本类YesYesYes

类的成员方法前如不加封装关键字,默认为public,不过最好加上关键字,便于阅读

$this 关键字

访问当前 对象 中的成员属性和成员方法

self:: 关键字

在不实例化的情况下访问当前 的成员属性和成员方法, 作用域在定义类时确定。该关键字常与 static, const 搭配使用,用于访问静态成员和常量

类名:: 属性名 或 类名:: 方法名

在不实例化的情况下访问当前 的成员属性或成员方法。常用于在派生类中访问基类成员

继承extends 关键字

php 只能单一继承

classBextendsA{......}implements 关键字

用于引用接口,不同于继承的单一性,一个类可以引用多个接口

classAimplementsdemo1,demo2,demo3{......}extends 与 implements 混用

先继承后引用,单继承多引用

classAextendsBimplementsdemo1,demo2,demo3{......}final 关键字

finalclassclassName1{finalfunc1(){......}}

加了 final 关键字的类不能被继承

基类中加了 final 关键字的成员方法不能在派生类中被重载

多态static 关键字

加了 static 关键字的成员方法和成员属性不具备多态性,用于在不实例化的情况下访问。静态属性单独占用内存,不会在对象实例化时被反复创建。

classclassName1{static$atrr1;staticfunc1(){......}}const 关键字

用于在类中定义常量,类似用于在外部定义常量的PHP关键字 define(); const 只能修饰类中的成员属性

classclassName1{constNAME;}

常量一般用大写字母命名,且常量不使用 $ 符号

instanceof 关键字

用于判断对象实例类型

$obj=newA();if($objinstanceofA){echo'A';}

摘自php手册