跳转到内容

PHP 编程/覆盖和重载

来自维基教科书,开放的书籍,用于开放的世界

PHP 中的重载提供了动态“创建”属性和方法的方式。这些动态实体通过可以在类中为各种操作类型建立的魔术方法进行处理。换句话说,在运行时创建属性/方法被称为属性重载/方法重载。

属性重载

[编辑 | 编辑源代码]

在 PHP 中,属性重载可以通过像 __set、__unset、__isset、__get 方法这样的魔术方法完成。重载可以通过像 __call 和 __call_static 这样的魔术方法完成。PHP 对“重载”的解释与大多数面向对象的语言不同。重载传统上提供了具有相同名称但参数数量和类型不同的多个方法的能力。

范围 返回类型 方法 参数 语法 额外说明
public void __set string $name , mixed $value public void __set ( string $name , mixed $value ) 在向不可访问的属性写入数据时运行。
public mixed __get string $name public mixed __get ( string $name ) 用于从不可访问的属性读取数据
public bool __isset string $name public bool __isset ( string $name ) 在对不可访问的属性调用 isset() 或 empty() 时触发
public void __unset string $name public void __unset ( string $name ) 在对不可访问的属性使用 unset() 时调用。

方法重载

[编辑 | 编辑源代码]

当我们尝试调用 PHP 中不存在的方法时,会调用 __call(),这样我们就实现了方法重载。

语法 描述
public mixed __call ( string $name , array $arguments ) __call() 在对象上下文中调用不可访问的方法时触发。
public static mixed __callStatic ( string $name , array $arguments ) __callStatic() 在静态上下文中调用不可访问的方法时触发。

在 OOP 的意义上,覆盖是在子类中替换父类方法。或者用简单的技术术语来说,方法覆盖意味着改变方法的行为。在 OOP 中,覆盖是你可以重新声明父类方法在子类中的过程。所以 OOP 中覆盖的基本含义是改变父类方法的行为。

通常,当父类有一些方法,但在子类中你想用不同的行为使用相同的方法时,需要方法覆盖。通过覆盖方法,你可以完全改变它在父类中的行为。为了在 OOP 中实现方法覆盖,我们通常在子类中创建相同的方法。


华夏公益教科书