面向对象
对比
结构化编程?
用流程图和自顶向下的方法设计
面向对象编程?
围绕着要解决的问题中的对象来设计
类与对象
类?具有相同或者相似结构、操作和约束规则的对象组成的集合。
对象?对象是某一类的具体化实例,每一个类都是具有某些共同特征的对象的抽象。
其关系?类的实例化结果就是对象,而对对象的抽象就是类
三大特性
封装、继承、多态
权限修饰符 :
public(公共的、默认)
private(私有的)修饰的属性只能在其 类里面 才能被访问到。
protected (受保护的) 本类和子类能访问
This
this
PHP5 中为解决变量命名冲突和不确定性问题,引入关键字“$this”代表其所在当前对象。
$this 在构造函数中指该构造函数所创建的新对象
在类中使用当前对象的属性和方法,必须使用$this->取值。
方法内的局部变量,不属于对象,不使用$this 关键字取值。
parent
parent
PHP5 中使用 parent::来引用父类的方法。
parent:: 可用于调用父类中定义的成员方法。
parent::的追溯不仅于直接父类。
接口
接口(interface)是抽象方法和静态常量定义的集合。
接口是一种特殊的抽象类,这种抽象类中只包含抽象方法和静态常量。
接口中没有其它类型的内容
接口的定义
在接口中的抽象方法只能是 public 的,默认也是 public 权限。
并且不能设置成 private 或者 protected 类型
定义
interface 接口名{
public getName();
public setName($name);
}
抽象
抽象方法
没有方法体的方法就是抽象方法。
abstract 可见性 function 方法名称(参数1,.....); // 如果没有显示地指定可见性,则默认为public
抽象类
抽象类
abstract class 类名{
属性;
方法;
抽象方法;
}
多态
多态
→对象的多态性是指在父类中定义的属性或行为被子类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或行为在父类及其各个子类中具有不同的语义。
→多态这个概念,在 Java 中指的是变量可以指向的对象的类型,可是变量声明类型的子类。对象一旦创建,它的类型是不变的,多态的是变量。
→在 PHP5 中,变量的类型是不确定的,一个变量可以指向任何类型的数值、字符串、对
象、资源等。我们无法说 PHP5 中多态的是变量。
→我们只能说在 PHP5 中,多态应用在方法参数的类型提示位置。
一个类的任何子类对象都可以满足以当前类型作为类型提示的类型要求。
所有实现这个接口的类,都可以满足以接口类型作为类型提示的方法参数要求。
简单的说,一个类拥有其父类、和已实现接口的身份。
魔术方法
在特定的情况下被触发
都是以双下划线开头
利用模式方法可以轻松实现PHP面向对象中重载(Overloading即动态创建类属性和方法)
final
1.final 关键字。
如果父类中的方法被声明为 final,则子类无法覆盖该方法。
如果一个类被声明为 final,则不能被继承。
属性不能被定义为 final,只有类和方法才能被定义为 final。
const
const
可以把在类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用 $ 符号。
常量的值必须是一个定值,不能是变量,类属性,数学运算的结果或函数调用。
接口(interface)中也可以定义常量
自动加载
spl_autoload_register(function ($className){
if(file_exists('./myclass/'.$className.'.class.php')){
include_once './myclass/'.$className.'.class.php';
}else{
exit('没有对应的可以被加载的操作类');
}
});
命名空间
作用
在PHP中,命名空间用来解决在编写类库或应用程序时,创建可重用的代码,如类或函数时碰到的两类问题
1.用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
2.为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
定义命名空间
命名空间通过关键字namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间。