PHP 8 في ثمانية أجزاء من الكود

يحتوي PHP 8 على الكثير من الميزات الجديدة ، في هذه القائمة سنلقي نظرة على أبرزها.

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

زمن


use \Support\Attributes\ListensTo;

class ProductSubscriber
{
    <<ListensTo(ProductCreated::class)>>
    public function onProductCreated(ProductCreated $event) { /* … */ }

    <<ListensTo(ProductDeleted::class)>>
    public function onProductDeleted(ProductDeleted $event) { /* … */ }
}

بدلا من docblock ، الصفات.

نعم ، أعلم أن بناء الجملة قد لا يكون بالطريقة التي تريدها أو تأمل فيها. ربما تفضل @ ، أو @: ، أو docblocks ، أو أي شيء آخر. لكنه سيكون ذلك فقط. الشيء الوحيد الجدير بالذكر عن بناء الجملة هو أن جميع الخيارات قد نوقشت ، وهناك أسباب وجيهة للغاية لاختيار هذه البنية. يمكنك قراءة ملخص موجز لذلك في RFC ، أو يمكنك قراءة المناقشة الكاملة حول RFC في قائمة المكونات الداخلية .



اثنان


public function foo(Foo|Bar $input): int|float;

public function bar(mixed $input): mixed;

يتيح لك دمج الأنواع تحديد عدة أنواع في وقت واحد. هناك أيضًا نوع مختلط جديد يمثل عدة أنواع في نفس الوقت.



ثلاثة


interface Foo
{
    public function bar(): static;
}

يمكنك تحديد ثابت في نوع الإرجاع.



أربعة


[JIT]
opcache.jit=5

مترجم JIT مدمج.

ما هو JIT؟

"JIT" تعني "في الوقت المناسب" - "في الوقت المناسب." ربما تعلم أن PHP هي لغة مترجمة: لا يتم تجميعها كبرنامج في لغة C أو Java أو Rust. بدلاً من ذلك ، يُترجم إلى رمز الآلة - وهو شيء يفهمه المعالج - في وقت التشغيل.

"JIT" هي طريقة تجمع أجزاء من التعليمات البرمجية في وقت التشغيل بحيث يمكن استخدام نسخة مجمعة بدلاً من ذلك.

فكر في الأمر على أنه "نسخة مخبأة" من التعليمات البرمجية المفسرة التي تم إنشاؤها في وقت التشغيل.

بمزيد من التفصيل كتب بالفعل على حبري



خمسة


$triggerError = fn() => throw new MyError();

$foo = $bar['offset'] ?? throw new OffsetDoesNotExist('offset');

يمكن استخدام رمي في التعبيرات.



ستة


try {
    // Something goes wrong
} catch (MySpecialException) {
    Log::error("Something went wrong");
}

يمكنك حذف متغير الاستثناء إذا لم تكن بحاجة إليه.



سبعة


public function(
    string $parameterA,
    int $parameterB,
    Foo $objectfoo,
) {
    // …
}

يمكنك تحديد فاصلة في نهاية قائمة المعلمات.



ثمانية


str_contains('string with lots of words', 'words');

str_starts_with('haystack', 'hay');

str_ends_with('haystack', 'stack');

وظائف سلسلة جديدة. أعتقد أن اسمهم يتحدث عن نفسه.
دعونا لا نخدع أنفسنا: 8 كتل من التعليمات البرمجية ليست كافية لتلخيص جميع الأشياء الجديدة الرائعة في PHP 8. لذا ، دعنا نضيف المزيد فقط.



تسع


function bar(Stringable $stringable) { /* … */ }

واجهة Stringable جديدة تتم إضافتها تلقائيًا إلى الفئات التي تطبق أسلوب __toString ().



عشرة


$object::class

Call :: class مباشرة من الكائن.



All Articles