عبدالفتاح الصلوي

ما الجديد في php 8.2

كتبها : عبدالفتاح الصلوي / في رصيف : PHP

ما الجديد في php 8.2

ما الجديد في php 8.2

حمل لنا الإصدار ال 8.2 عدة ميزات وحدثت بعض التعديلات على اللغة هنا نستعرض لكم أبرز ما جاء به هذا الإصدار

1- انواع قيم جديدة null, true, and false as standalone types


 الان اصبح لدينا انواع بيانات منفصلة من نوع null و true و false . فالان مثلا يمكن ان تعيد اي دالة  نوع بيانات محددة مثل false سابقا كنا نستخدم لذلك نوع البيانات bool.
        function alwaysFalse(): false
        {
            return false;
        }
        

ينطبق هذا على true , null

2- Readonly classes تعريف الصنف للقراءة فقط.

ظهر في الإصدار 8.1 امكانية التصريح/تعريف عن خصائص الكلاس للقراءة فقط بحيث حتى ولو كانت تلك الخصائص عامة ويمكن الوصول لها لكن لا يمكننا تغييرها بعد استدعاء نسخة من الفئة(الكلاس). مثال :

    class Post
    {
     public function __construct(
     public readonly string $title,
     public readonly Author $author,
     public readonly string $body,
    public readonly DateTime $publishedAt,
     ) {}
    }
    

اذا ما الجديد في هذا الاصدار ؟
الجديد هو امكانية ان يكون الكلاس بكامله للقراءة فقط . وبذا لا يمكن حتى اضافة خواص ديناميكية للكلاس . مثال :

        readonly class Post
        {
             public function __construct(
                 public string $title,
                public Author $author,
                public string $body,
                public DateTime $publishedAt,
                )
        {}

    }
    

3- Deprecate dynamic properties. الغاء الخواص الديناميكية


هذا التغيير بالذات أثار الجدل قبل فترة عندما عرض للتصويت وعارضه الكثير. فما هو ؟
يبدو ان الكثير كان يقوم باستخدام الخواص الديناميكية في كتابة الاكواد . مهلا ماذا تعني بالخصائص الديناميكة ؟
حسناً. نعني بها أنه كان بامكانك أن تضيف خاصية جديدة غير معرفة في الكلاس واسناد بيانات لها . مثال :


           class Post
           {
                public string $title;
                //$post->name = 'Name';
           }
        

فهنا كان بالامكان ان نضيف خاصية name الى الكلاس ولن يحدث مشكلة في الاصدارات السابقة . لكن في الاصدار 8.2 سيظهر لنا استثناء من نوع ErrorException بينما في الاصدار 9.0 يظهر خطأ يخبرنا أن الخاصية ليست موجودة في الكائن من الاساس. ولكن ان كنت تحبذ هذه الميزة فما زال بامكانك استخدامها عن طريق دوال set و get . مثال :


            class Post
            {
                 private array $properties = [];
                 public function __set(string $name, mixed $value): void
                {
                    $this->properties[$name] = $value;

                }
        }
        // ... $post->name = 'Name';
        

اما بخصوص الكائن من نوع stdClass فلن تؤثر فيه هذه التغييرات وسيبقى يدعم الخواص الديناميكية كعادته.
واخيرا اذا ما زلت مصرا على استخدام الميزة فهناك امكانية ايضا عن طريق التصريح بذلك عن طريق #[AllowDynamicProperties] . مثال :


        #[AllowDynamicProperties]
        class Post
        {
             public string $title;
        }
        
علامات ذات صلة :