PHP 类的使用与总结

来源:互联网 发布:淘宝联盟分享赚互刷 编辑:程序博客网 时间:2024/06/07 16:11

对象序列化

只能序列化对象内部的数据,即非静态属性。

需在反序列化对象之前加载类,也可以触发自动加载机制。

 

__sleep    序列化需序列化的属性。

    - 提交未提交的数据,或类似的清理操作,部分串行化对象。

    - 返回一个包含对象中所有应被序列化的变量名称的数组

__wakeup  反序列化时,预先准备对象需要的资源

    - 重新建立数据库连接,或执行其它初始化操作

  public function __sleep() {

    return array('server', 'username', 'password', 'db');

  }

  public function __wakeup() {

    $this->connect();

  }

 

对象继承

class 子类名 extends 父类 {}

如果一个对象是子类的对象,那么同时也是父类的对象。

单继承:一个类只能继承一个父类,不能同时继承多个类。但一个父类可以被多个子类继承。

 

instanceof  判断某对象是否为某类的对象

  对象名 instanceof 类名

 

访问控制

public    公有的(继承链、本类、外部均可访问)

protected  保护的(仅继承链、本类可访问)

private    私有的(仅本类可访问)

根据成员定义位置、访问位置判断。

 兼容性问题

声明属性时,var关键字声明的默认为public权限

声明方法时,省略访问修饰符,默认为public权限

 

重写 override

$this代表本对象,被谁调用,就代表哪个对象。

继承时,子类成员名于父类成员名发生冲突,则子类成员会重写父类成员。

属性和方法均可被子类重写。

当父类的方法或属性已经不满足子类的需求,则需要重写。

也可能因为命名不规范导致重写。

 

私有属性不能被重写,每个私有属性都会被记录。在记录属性名的同时,还会记录类。

 

如果有内置函数被重写,则可调用父类方法。如调用父类构造方法parent::__construct()

 

重写限制

访问限制:

  子类的成员的访问控制必须相等或弱于父类。

方法参数限制:

  参数数量必须相同,参数名可不同。

 

$this确定原则

$this为调用该方法的对象,表示该方法的执行环境对象。

  - 对象调用

  - 环境的传递。如果当前调用时,不能确定$this的值(静态调用),此时静态调用所处对象环境会传递到被调用的方法内。

$this并非永远代表本对象,而是由方法的执行环境决定。

 

final

如果父类中的方法被声明为final,则子类无法覆盖(重写)该方法。

如果一个类被声明为final,则不能被继承。

但加有final关键字的类依旧能被实例化!

抽象类

关键字:abstract

抽象类不能直接被实例化,必须先继承该抽象类,然后再实例化子类。

抽象类中至少要包含一个抽象方法。非抽象类不能包含抽象方法。

如果类方法被声明为抽象的,那么其中就不能包括具体的功能实现。抽象方法不能包含大括号及方法体。

继承一个抽象类的时候,子类必须实现抽象类中的所有抽象方法。

  即,子类必须重写抽象父类中的所有抽象方法。

另外,这些方法的可见性必须和抽象类中一样(或者更为宽松)。

  即,如果抽象类中某个抽象方法被声明为protected,那么子类中实现的方法就应该声明为protected或者public,而不能定义为private

抽象类的子类中的普通方法执行方式和其他类相同。

作用:

  1. 继承,为扩展类,统一公共操作。

  2. 限制结构(规范)。规范子类的结构。


对象的遍历(迭代)

对象通过属性保存数据,故遍历对象的属性。

- foreach语言结构,获得属性名和属性值。

  foreach ($obj as $p_name => $p_value) {}

 自定义遍历(迭代器Iterator)

Iterator - 可在内部迭代自己的外部迭代器或类的接口

Iterator::current  — 返回当前元素

Iterator::key    — 返回当前元素的键

Iterator::next    — 向前移动到下一个元素

Iterator::rewind  — 返回到迭代器的第一个元素

Iterator::valid    — 检查当前位置是否有效

 

 对象的克隆

//对象之间的传值是[引用]传递。

克隆:新对象 = clone 旧对象

  - 所有的引用属性仍然会是一个指向原来的变量的引用。 

__clone()方法在对象被克隆时自动调用。

注意:构造方法对应实例化(new),克隆方法对应克隆(clone)

 


0 0
原创粉丝点击