PHP 重载

2025年4月23日 | 阅读 4 分钟

Java 或 C++ 中的重载意味着一个类可以拥有许多同名但参数和/或返回类型不同的类方法。但重载一词在 PHP 中的含义有所不同。它是一项启用方法和属性动态创建的功能。PHP 的魔术方法,即以双下划线开头的方法名,用于配置动态方法和属性。

PHP 中的魔术方法,用于重载的方法,在您与当前作用域内未定义或不可访问的属性或方法进行交互时会被自动触发。

因此,在本章中,我们涵盖了以下主题 -

  • 属性重载
  • 方法重载
  • 重载中的访问控制
  • 继承与重载

PHP 中的属性重载

PHP 中的属性重载是通过特定的魔术方法处理的,在与不可访问或不存在的属性交互时会自动调用这些方法。这些方法包括:

  • __get(string $name) - 在读取不可访问属性的数据时调用。
  • __set(string $name, mixed $value) - 在写入不可访问(私有、保护或未定义)属性时触发。
  • __unset(string $name) - 当对不可访问属性调用 unset() 时执行。
  • __isset(string $name) - 当对不可访问属性使用 isset() 或 empty() 时调用。

参数

  • $name: 正在访问的属性的名称。
  • $value: (对于 __set)正在赋值给属性的值。

这些方法允许开发人员动态地控制如何处理属性,对于管理具有灵活或未定义属性的对象尤其有用。需要注意的是,属性重载仅在对象上下文中有效;这些方法不会在静态上下文中触发,因此不应将其声明为静态。

示例

输出

Setting 'name' to 'Alice'
Setting 'age' to '25'
Getting 'name'
Alice
Getting 'age'
25
Is 'name' set?
Unsetting 'age'
Getting 'age'

PHP 中的方法重载

PHP 中,方法重载允许您处理对未定义或不可访问的方法的调用。这是通过两个魔术方法实现的:

  • __call(string $name, array $arguments): 在对象上下文中调用未定义或不可访问的方法时调用。
  • __callStatic(string $name, array $arguments): 在静态上下文中调用未定义或不可访问的方法时调用。

这些方法为 开发人员 提供了在运行时动态定义对未定义方法调用的行为的灵活性。

示例

输出

Calling instance method 'run' with arguments: fast, morning
Calling static method 'walk' with arguments: slow, evening

属性重载中的访问控制

在此,__get 和 __set 方法可以访问私有或保护属性,这可能会绕过 封装

示例

输出

Trying to access 'hidden': Secret
Setting 'hidden' to 'Revealed'
Trying to access 'hidden': Revealed

PHP 中的继承与重载

在 PHP 中,当一个类使用 继承 时,子类可以覆盖父类中定义的魔术方法,如 __get()、__set()、__call() 和 __callStatic()。当子类希望自定义或扩展这些方法的行为时,这尤其有用。

示例

输出

ChildClass customizing before parent...
ParentClass handling undefined method: undefinedMethod
ChildClass customizing after parent...