ホームページ >バックエンド開発 >PHPチュートリアル >PHPのオーバーロードを正しく理解する

PHPのオーバーロードを正しく理解する

藏色散人
藏色散人転載
2019-10-23 13:24:332084ブラウズ

PHP のオーバーロードは Java のオーバーロードとは異なるため、混同しないでください。 Java ではクラス内で同じ名前の複数の関数が許可され、各関数には異なるパラメーターが与えられますが、PHP では同じ名前の関数が 1 つだけ許可されます。たとえば、Java は複数のコンストラクターを持つことができますが、PHP は 1 つのコンストラクターのみを持つことができます。

PHP のオーバーロードとは、マジック メソッドによる属性とクラスの動的作成を指します

#● 属性のオーバーロード - __get および __set

#● メソッドのオーバーロード - __call および __callStatic

たとえば、Laravel のリクエスト クラスは属性のオーバーロードを実装し、コードをより簡潔にします

$name = $request->name;

この属性はクラスには存在しませんが、マジック メソッドを通じて渡されます。具体的な実装は次のとおりです。以下のように

public function __get($key)
{
    return Arr::get($this->all(), $key, function () use ($key) {
        return $this->route($key);
    });
}

この実装方法は広く使用されており、実装原理を簡単に要約します

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

以上がPHPのオーバーロードを正しく理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
前の記事:無名関数次の記事:無名関数