「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > プロパティフック PHP なし

プロパティフック PHP なし

2024 年 11 月 8 日に公開
ブラウズ:258

Property Hooks no PHP

11 月には、私たちが愛する PHP のバージョン 8.4 がリリースされます。それに伴い、コミュニティが待ち望んでいた新機能、プロパティ フックが追加されます。 C#、Swift、Kotlin などの他の言語からインスピレーションを得たこの新機能は、魔法のメソッド __set() や __get() の煩わしさを軽減します。

プロパティをプライベートとして作成せずにゲッターとセッターを現在使用し、プロパティとは異なる名前を持つ 2 つの新しいメソッドを作成する方法の例を示します。

class Foo
{
    private String $bar;

    public function __set($name, $value)
    {
        $this->$name = $value . "!!!"; 
    }

    public function __get($name)
    {
         return "!!!" . $this->$name;
    }
}

__get() と __set() を使用すると、値を設定するときと値を検索するときに $bar をパブリックのままにすることができますが、実装は異なり、プロパティ以外の名前のメソッドを作成する必要はありません。視覚的な例では、使用法は次のようになります:

$foo = new Foo();

$foo->bar = "new release";
// aqui o valor que ficará salvo seria "new release!!!"

echo $foo->bar; // aqui retornaria "!!!new release!!!"

次に、__get() と __set() が他のプロパティでどのように見えるか想像してみてください。完全に混乱しています。これを行うもう 1 つの方法は、getBar() メソッドと別の setBar() メソッドを作成することです。ただし、これでは 1 つのプロパティのみが考慮され、使用法は前のプロパティとは異なります:

class Foo
{
    private String $bar;

    public function setBar($value)
    {
        $this->bar = $value . "!!!"; 
    }

    public function getBar()
    {
         return "!!!" . $this->bar;
    }
}

$foo = new Foo();

$foo->setBar('new release');
// aqui o valor que ficará salvo seria "new release!!!"

echo $foo->getBar(); // aqui retornaria "!!!new release!!!"

個人的には、このユースケースで新しいメソッドを作成するのは少し面倒だと感じています。値の取得と設定の両方にプロパティの直接呼び出しを使用することを好みます。この新機能は、この混乱を解決するために登場し、クラス内の宣言とともに get と set を個別に定義できるようになります。

class Foo
{
    public String $bar {
        set (String $value) => $this->bar = $value . "!!!";
        get => "!!! . $this->bar";
    }
}

この新しいコードは同じことを個別に実行しますが、新しいメソッドを作成したり、クラスが持つ各プロパティの処理が必要な __get() や __set() を使用したりする必要はありません。

あとは、この新機能のリリースを待つだけです。11 月 21 日にリリースされる予定です。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/luciencorreia/property-hooks-no-php-84-2jld?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3