方法重载与重写

重载 (Overloading)

PHP中的重载提供了动态创建属性和方法的方式。这些动态实体通过魔术方法进行处理,魔术方法可以在类中定义用于执行各种操作。简而言之,运行时创建属性/方法被称为属性重载/方法重载。

属性重载 (Property Overloading)

在PHP中,属性重载可以通过以下魔术方法来实现:__set__unset__isset__get。通过这些魔术方法,我们可以动态地管理类的属性。重载也可以通过魔术方法如 __call__callStatic 来实现。需要注意的是,PHP中“重载”的概念与大多数面向对象语言不同。在传统的面向对象语言中,重载通常指的是允许具有相同名称但参数数量和类型不同的方法。

Scope Return Type Method Params Syntax Extra Note
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() 时调用
方法重载 (Method Overloading)

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

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

重写 (Overriding)

在面向对象编程(OOP)中,重写的含义是用子类中的方法替换父类的方法。简单来说,方法重写意味着改变方法的行为。在OOP中,重写是一个过程,通过它你可以在子类中重新声明父类的方法。因此,OOP中重写的基本含义是改变父类方法的行为。

通常,当父类中有某个方法,但在子类中你希望该方法具有不同的行为时,就需要使用方法重写。通过方法重写,你可以完全改变父类方法的行为。要在OOP中实现方法重写,通常需要在子类中创建一个与父类相同的方法。

总结

  • 属性重载方法重载使得PHP能够动态地创建和管理对象的属性和方法,尤其是在无法直接访问属性或方法时。
  • 方法重写允许子类通过重新定义父类中的方法来改变其行为,使得子类可以根据需要提供不同的实现。
Last modified: Friday, 10 January 2025, 1:15 AM