"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > خطافات الملكية لا PHP

خطافات الملكية لا PHP

تم النشر بتاريخ 2024-11-08
تصفح:380

Property Hooks no PHP

في نوفمبر، سنطلق الإصدار 8.4 من PHP المحبوب لدينا ومعه سيكون لدينا ميزة جديدة طال انتظارها من قبل المجتمع: خطافات الملكية! مستوحاة من لغات أخرى مثل C# وSwift وKotlin، تعمل هذه الميزة الجديدة على التخلص من متاعب الطرق السحرية __set() و__get().

سأعرض مثالاً لكيفية الحصول حاليًا على الحروف والمحددات دون الحاجة إلى إنشاء الخاصية كخاصية وإنشاء طريقتين جديدتين بأسماء مختلفة عن الخاصية.

class Foo
{
    private String $bar;

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

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

باستخدام __get() و __set() يمكنني ترك شريط $ عامًا عندما أقوم بتعيين القيمة وعندما أبحث عنها، ولكن مع تنفيذ مختلف ودون الحاجة إلى إنشاء طرق بأسماء أخرى غير الخاصية. في المثال المرئي، سيبدو الاستخدام كما يلي:

$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() مع الخصائص الأخرى، فوضى تامة. هناك طريقة أخرى للقيام بذلك وهي إنشاء طريقة getBar() وطريقة setBar() أخرى، ولكن هذا يأخذ في الاعتبار خاصية واحدة فقط وسيكون الاستخدام مختلفًا عن الخاصية السابقة:

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!!!"

أنا شخصياً أجد أنه من المزعج بعض الشيء إنشاء طرق جديدة لحالة الاستخدام هذه، أفضل كثيرًا استخدام الاتصال المباشر للخاصية للحصول على قيمتها وتعيينها. تصل هذه الميزة الجديدة لحل هذه الفوضى وتسمح لك بتحديد الحصول والتعيين بشكل فردي مع الإعلان في الفصل.

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

يقوم هذا الكود الجديد بنفس الشيء ولكن بشكل فردي، دون إنشاء طرق جديدة أو استخدام __get() و __set() التي تحتاج إلى معالجة لكل خاصية يمتلكها الفصل.

الآن فقط انتظر إطلاق هذه الميزة الجديدة، والتي من المقرر أن تصدر في 21 نوفمبر!

بيان الافراج تم نشر هذه المقالة على: https://dev.to/luciencorreia/property-hooks-no-php-84-2jld?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3