前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP面向对象-方法的覆盖和重载(三)

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

原创
作者头像
堕落飞鸟
发布2023-04-28 09:14:34
3790
发布2023-04-28 09:14:34
举报
文章被收录于专栏:飞鸟的专栏

魔术方法

魔术方法是一组特殊的方法,可以在特定的情况下被自动调用。在 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;如果传递一个参数,将返回该参数;如果传递多个参数,将返回它们的总和。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档