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

سمات PHP: كيفية استخدام سمات PHP وإنشاء فئات سمات مخصصة - نصائح سريعة

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

تم تقديم سمات PHP في PHP 8.0. يمثل هذا الإصدار معلمًا هامًا للغة، حيث جلب العديد من الميزات والتحسينات الجديدة، بما في ذلك تقديم سمات لإضافة بيانات التعريف إلى إعلانات التعليمات البرمجية.

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

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

تذكر أن السمات ليس لها أي تأثير في وقت التشغيل. وستكون متاحة في Reflection APIs لجعل تطبيقك على علم بالأشياء التي تريد تشغيلها بناءً على السمات المرتبطة بفئة أو طريقة أو خاصية.

السمات المضمنة

يأتي PHP مزودًا بالعديد من السمات المضمنة التي تخدم أغراضًا مختلفة. فيما يلي بعض النقاط البارزة:

@مهمل

يشير إلى وظيفة أو طريقة مهملة، مما يشير إلى أنه يجب تجنبها حيث قد تتم إزالتها في الإصدارات المستقبلية.

#[Deprecated("Use newFunction() instead")]
function oldFunction() 
{
    // Function implementation
}

@تجاوز

يتأكد من أن الطريقة الموجودة في الفصل الفرعي تهدف إلى تجاوز الطريقة الموجودة في الفصل الأصلي.

class Child extends Parent {
    #[Override]
    public function defaultMethod() 
    {
        // Method implementation
    }
}

إذا كان defaultMethod() سيغير اسمه في النهاية في الفئة الأصل، فهذا لم يعد تجاوزًا. في هذه الحالة، ستطلق PHP تحذيرًا لأننا أعلنا صراحةً أننا نتوقع أن نقوم بالتجاوز وننبهنا بشأن المحاذاة الخاطئة.

على أي حال، يجب أن يسمح لنا IDE الجيد بعدم الوقوع في هذا النوع من الأخطاء.

@قمع التحذيرات

يمنع تحذيرات محددة لجزء معين من التعليمات البرمجية.

#[SuppressWarnings("SomeWarning")]
function someFunction() 
{
    // Function implementation
}

إنشاء فئات السمات المخصصة

الآن، لنقم بإنشاء فئة سمة مخصصة. يعد هذا مفيدًا عندما تريد تغليف سلوك معين داخل إحدى السمات.

#[Attribute]
class CustomAttribute 
{
    public string $message;

    public function __construct(string $message) 
    {
        $this->message = $message;
    }
}

يمكنك بعد ذلك استخدام هذه السمة المخصصة على عناصر مختلفة:

class MyClass 
{
    #[CustomAttribute("This is a custom attribute")]
    public $myProperty;

    #[CustomAttribute("Another custom attribute")]
    public function myMethod() 
    {
        // Method implementation
    }
}

أمثلة الاستخدام

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

#[Attribute(Attribute::TARGET_PROPERTY)]
class MaxLength 
{
    public int $maxLength;

    public function __construct(int $maxLength) 
    {
        $this->maxLength = $maxLength;
    }
}

في المثال أعلاه قمنا بتقييد القدرة على تطبيق السمة على خصائص الفئة فقط. الآن يمكننا استخدامه في فئة المستخدم:

class User 
{
    #[MaxLength(20, message: "Username must be 20 characters or less")]
    public string $username;

    // Other properties and methods
}

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

اعتماد أطر PHP

تعتمد أطر عمل PHP الأكثر استخدامًا مثل Symfony وLaravel بالفعل سمات لتحل محل "التعليقات التوضيحية" بشكل أساسي. في Symfony 5.2 أو الإصدارات الأحدث، يمكنك الإعلان عن وحدة تحكم وتوصيلها إلى مسار باستخدام السمات:

public class Arrayable implements \ArrayAccess
{
    …

    public function offsetExists($offset)
    {
        return isset($this->data[$offset]);
    }

    …
}

منذ PHP 8 تغير تعريف واجهة ArrayAccess إلى:

PHP Attributes: how to use PHP Attributes and create custom attribute classes – Fast Tips

باستخدام السمات قاموا بفرض إعلان نوع البيانات للوسائط في وظائف الإزاحة. باستخدام سمة LanguageLevelTypeAware، إذا لم يوفر التنفيذ نوع البيانات للوسائط، فسيتم إطلاق "تحذير إهمال".

لكن الإعلان عن نوع البيانات في وسيطات الوظيفة يكسر التوافق مع الإصدارات الأقدم من PHP التي لا تدعم تعريف نوع بيانات الوسائط.

نظرًا لأنه كان مجرد تحذير للتغييرات المستقبلية، فقد قمنا بحل المشكلة باستخدام سمة PHP مدمجة أخرى لقمع التحذير:

public class Arrayable implements \ArrayAccess
{
    …

    #[\ReturnTypeWillChange]
    public function offsetExists($offset)
    {
        return isset($this->data[$offset]);
    }

    …
}

إن خاصية ReturnTypeWillChange تخبر PHP ببساطة بأننا نعرف عن التغييرات المستقبلية في اللغة، وقد خططنا بالفعل للتحديثات اللازمة.

بالنسبة لهذا التغيير على وجه الخصوص، سيتم تنفيذه بالتأكيد في PHP 9.

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

جديد للمفتش؟ مراقبة التطبيق الخاص بك مجانا

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

على عكس الأنظمة الأساسية المعقدة الأخرى، فإن Inspector سهل للغاية، وصديق PHP. يمكنك تجربة حزمة Laravel أو Symfony الخاصة بنا.

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

أو تعرف على المزيد على الموقع: https://inspector.dev

PHP Attributes: how to use PHP Attributes and create custom attribute classes – Fast Tips

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/inspector/php-attributes-how-to-use-php-attributes-and-create-custom-attribute-classes-fast-tips-7nf?1إذا كان هناك أي التعدي، يرجى الاتصال بـ [email protected] للحذف
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3