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/
本文版权归本人和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连 
接,否则保留追究法律责任的权利。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。