经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
正确理解 PHP 的重载
来源:cnblogs  作者:.Ronin  时间:2019/11/7 20:45:39  对本文有异议

 

PHP 的重载跟 Java 的重载不同,不可混为一谈。Java 允许类中存在多个同名函数,每个函数的参数不相同,而 PHP 中只允许存在一个同名函数。例如,Java 的构造函数可以有多个,PHP 的构造函数则只能有一个。

 

PHP 的重载是指 通过魔术方法对属性和类的动态创建

● 属性的重载 - __get 与 __set

● 方法的重载 - __call 与 __callStatic

例如,Laravel 的请求类实现了属性重载,使代码变得更加的简洁

1

$name = $request->name;

该属性在类中并不存在,而是通过魔术方法来访问的,具体实现如下

1

2

3

4

5

6

public function __get($key)

{

    return Arr::get($this->all(), $key, function () use ($key) {

        return $this->route($key);

    });

}

这种实现方式的应用非常广泛,简单的归纳实现的原理

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

class Foo

{  

    private $params = [];

    function __construct(array $params = [])

    {

        $this->params = $params;

    }

    public function __set($name, $value)

    {

        $this->params[$name] = $value;

    }

    public function __get($name)

    {

        return $this->params[$name];

    }

    public function __isset($name)

    {

        return isset($this->params[$name]);

    }

    public function __unset($name)

    {

        unset($this->params[$name]);

    }

}

原文链接:http://www.cnblogs.com/heyue0117/p/11812475.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号