PHP面向对象-方法的覆盖和重载(三)

2023-04-28 09:14:34 浏览数 (1)

魔术方法

魔术方法是一组特殊的方法,可以在特定的情况下被自动调用。在 PHP 中,魔术方法用于实现方法的重载。下面是一些常见的魔术方法:

  • __call():当调用一个不存在的方法时被调用;
  • __callStatic():当调用一个不存在的静态方法时被调用;
  • __get():当访问一个不存在或不可访问的属性时被调用;
  • __set():当设置一个不存在或不可访问的属性时被调用;
  • __isset():当使用 isset()empty() 判断一个不存在或不可访问的属性时被调用;
  • __unset():当使用 unset() 删除一个不存在或不可访问的属性时被调用。

下面是一个使用 __call() 魔术方法实现方法重载的示例:

代码语言:javascript复制
class Calculator {
    public function __call($name, $arguments) {
        if ($name == 'add') {
            switch (count($arguments)) {
                case 0:
                    return 0;
                case 1:
                    return $arguments[0];
                default:
                    $result = 0;
                    foreach ($arguments as $number) {
                        $result  = $number;
                    }
                    return $result;
            }
        }
    }
}

$calculator = new Calculator();
echo $calculator->add(); // Output: 0
echo $calculator->add(1); // Output: 1
echo $calculator->add(1, 2, 3); // Output: 6

在上面的示例中,我们定义了一个 Calculator 类,并使用 __call() 魔术方法来实现 add() 方法的重载。如果调用 add() 方法时不传递任何参数,将返回 0;如果传递一个参数,将返回该参数;如果传递多个参数,将返回它们的总和。

php

0 人点赞