PHP学习笔记——11.面向对象2
1.静态属性/方法
①定义
在属性/方法前加static修饰,就称之为静态属性/方法
普通属性/方法是依赖于对象的,必须在实例化对象后,
才会出现在内存中,进行访问及操作
而静态属性/方法不依赖于对象,当类声明后,即可进行访问操作
因此,其只会有一份,不会根据对象的增加而增加
②调用及访问
调用本类 self::$静态属性; self::静态方法();
调用父类 parent::$静态属性; parent::静态方法();
外部访问 类名::$静态属性; 类名::静态方法();
③延迟绑定
父类中包含:a() b(self::a()) 子类中包含:a()
当子类调用b()方法时,因其自身无b()方法,则找到父类的b()方法
而b()方法中的self指其自身,也就是调用父类中的a()方法
而将self改为static,则返回找到子类自身的a()方法
总结:self是指当前所在的类;而static是指调用者
2.类常量
①定义
只在类的内部发挥作用的常量称为类常量
又可以理解为不可修改的静态属性
在属性前添加const修饰,不能添加权限修饰符
声明及使用时都不需要使用$符
②魔术常量
PHP自带的类常量,无法设置值,其值是随着环境变化而改变的
__FILE__ 文件的完整路径和文件名;常用于在初始化脚本时,检测网站的根目录
__LINE__ 文件中当前的行号;常用于在DEBUG时,记录错误信息
__DIR__ 文件所在目录
__CLASS__ 返回当前的类名
__METHOD__ 返回当前的方法名
3.单例模式
①作用
为了防止某个类被多名开发者反复实例化,造成资源浪费
而对其进行限制,只允许有一个实例存在,称为单例模式
②语法
class 类名 {
//创建一个静态的保护属性,用于存放实例化结果
static protected $属性名;
//将构造方法设置为最终及保护,防止被继承后重写或直接实例化
final protected function __construct () {
}
//创建静态公共方法,用于在外部通过类直接调用
static public function 方法名 () {
//判断是否已经存在一个实例
if(self::$属性名 instanceof self) {
//若存在则直接返回
return self::$属性名;
}else{
//若不存在,则实例化后再返回
self::$属性名 = new self();
return self::$属性名;
}
}
}
$对象 = 类名::方法名(); //通过调用类中的方法产生一个唯一的对象
③注解
final修饰的类不能被继承;final修饰的方法可以被继承,但不能重写
对象 instanceof 类名 可用于判断对象是否为该类的实例
4.抽象类
①定义
类前添加abstract修饰则为抽象类;方法前加abstract修饰则为抽象方法
抽象类不能被实例化;抽象方法不能有方法体,即{}
用于统一所有子类所具有的功能,规范化操作、增强可拓展性
②语法
abstract class 父类 {
public abstract function 方法名();
}
③注意
有抽象方法(包括继承来的)的类一定是抽象类;抽象类里不一定有抽象方法
要对抽象类进行实例化,需要先继承,并完成所有抽象方法
5.接口
①定义
是抽象类的变体
如果说类是对象的抽象,那么接口就是类的抽象
接口组合成不同的类,而类则实例化出不同的对象
②语法
interface 接口名 {
public function 方法();
}
class 类名 implements 接口1,接口2,... {
public function 方法(){
}
}
③注意
因接口中方法必须是抽象的,所以不需要加abstract
一个接口可以继承自另一个接口,与类的继承相同
④抽象类与接口的区别
抽象类中可以有普通属性/方法/构造方法;接口中必须只有抽象方法
抽象类中的方法可以是私有的;接口中的方法只能是公共的
一个类只能继承自一个抽象类;一个类却可以实现多个接口
作者:@zhnoah
出处:http://www.cnblogs.com/zhnoah/
本文版权归本人和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连
接,否则保留追究法律责任的权利。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。