正確理解 PHP 的重載

 

PHP 的重載跟 Java 的重載不一樣,不可混爲一談。Java 容許類中存在多個同名函數,每一個函數的參數不相同,而 PHP 中只容許存在一個同名函數。例如,Java 的構造函數能夠有多個,PHP 的構造函數則只能有一個。php

 

PHP 的重載是指 經過魔術方法對屬性和類的動態建立web

● 屬性的重載 - __get 與 __set函數

● 方法的重載 - __call 與 __callStaticthis

例如,Laravel 的請求類實現了屬性重載,使代碼變得更加的簡潔spa

13d

$name = $request->name;code

該屬性在類中並不存在,而是經過魔術方法來訪問的,具體實現以下ip

1ci

2get

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]);

    }

}

相關文章
相關標籤/搜索