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

كيفية الحصول على اسم الفئة من فئة PHP الموسعة في استدعاء الأسلوب الثابت؟

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

How to Get the Class Name from an Extended PHP Class in a Static Method Call?

الحصول على اسم الفئة من استدعاء ثابت لفئة PHP الموسعة

في البرمجة الموجهة للكائنات، غالبًا ما تقوم الفئات بتوسيع الفئات الأساسية لوراثة وظائفها وتوسيعها . يتضمن السيناريو الشائع الحاجة إلى الحصول على اسم الفئة من استدعاء أسلوب ثابت في فئة موسعة، على الرغم من أن CLASS تُرجع دائمًا اسم الفئة المحددة.

المشكلة: عدم إمكانية الوصول إلى اسم الفئة في الأساليب الثابتة الأصل

فكر في سيناريو يحتوي على فئتين، الإجراء و MyAction ، حيث MyAction يمتد الإجراء . يحدد الإجراء طريقة ثابتة، n()، والتي لا يمكن الوصول إليها عبر ثابت CLASS داخل الطرق الثابتة الأصلية، مما يؤدي إلى CLASS يتم تعيين القيمة على "الإجراء" بغض النظر عن فئة الاتصال.

الحلول:

1. الارتباطات الثابتة المتأخرة (PHP 5.3):

تتيح لك الارتباطات الثابتة المتأخرة تحديد الفئة المستهدفة لاستدعاء الطريقة الثابتة في وقت التشغيل بدلاً من تحديد الطريقة. يتم تحقيق ذلك باستخدام الدالة get_call_class()، والتي تُرجع اسم الفئة التي تم استدعاء الطريقة الثابتة فيها.

على سبيل المثال:

class Action {
    public static function n() {
        return get_called_class();
    }
}

class MyAction extends Action {

}

echo MyAction::n(); // Outputs "MyAction"

2. استخدام get_class($this) (الطرق غير الثابتة فقط):

إذا كانت الطريقة المعنية ليست ثابتة، فيمكنك استخدام get_class($this) للحصول على الفصل الاسم الذي تم استدعاء الطريقة منه.

على سبيل المثال:

class Action {
    public function n() {
        echo get_class($this);
    }
}

class MyAction extends Action {

}

$foo = new MyAction;
$foo->n(); // Outputs "MyAction"

الاستنتاج:

يقدم كل من الارتباطات الثابتة المتأخرة و get_class($this) حلولاً لاسترداد اسم الفئة من استدعاء أسلوب ثابت في فئة موسعة. يُفضل الارتباط الثابت المتأخر للطرق الثابتة، بينما يكون get_class($this) مفيدًا للطرق غير الثابتة.

أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3