مرحبا يا هبر! أقدم إليكم ترجمة المقال "
مقدمة إلى PHP Reflection API "
للمخرج مصطفى مجدي .
كيفية تحليل بنية البيانات في PHP

الدخول
عندما بدأت البرمجة في PHP ، لم أكن أعلم إمكانيات
واجهة برمجة تطبيقات Reflection . السبب الرئيسي هو أنني لم أكن بحاجة إلى تصميم فصولي أو وحداتي أو حتى حزمي البسيطة. ثم اكتشفت أن هذا يلعب دورًا رئيسيًا في العديد من المجالات. في المقالة ، سننظر في
Reflection API في النقاط التالية:
- ما هو انعكاس API ؟
- التثبيت والتكوين
- استخدام
- الخاتمة
- توصيات
1. ما هو انعكاس API
في علوم الكمبيوتر ، يعني الانعكاس أو الانعكاس (الاسم المستعار للتأمل ، الانعكاس باللغة الإنجليزية) عملية يمكن خلالها للبرنامج تتبع وتعديل هيكله وسلوكه في وقت التشغيل. - ويكيبيديا .
ماذا تعني القدرة على التوقف والبحث داخل الكود (
الهندسة العكسية )؟ دعونا نلقي نظرة على مقتطف الشفرة التالي:
class Profile { public function getUserName(): string { return 'Foo'; } }
فئة
ملف التعريف هو الصندوق الأسود. باستخدام
واجهة برمجة تطبيقات Reflection ، يمكنك قراءة ما بداخلها:
وبالتالي ، فإن
ReflectionClass بمثابة محلل لفئة
ملف التعريف الخاص بنا ، وهذه هي الفكرة الرئيسية
لواجهة برمجة التطبيقات Reflection .
يمنحك PHP مفتاح أي صندوق مقفل ، لذلك لدينا المفاتيح
لما يلي:
ReflectionClass : تقارير معلومات الفصل.
ReflectionFunction : تقارير معلومات الوظيفة.
ReflectionParameter : يسترجع معلومات حول معلمات دالة أو طريقة.
ReflectionClassConstant : تقارير معلومات فئة ثابتة.
يمكنك دراسة القائمة الكاملة على
php.net2. التثبيت والتكوين
لاستخدام فئات
Reflection API ، ليست هناك حاجة لتثبيت أو تكوين أي شيء ، لأنها جزء من PHP الأساسية.
3. أمثلة على الاستخدام
فيما يلي بعض الأمثلة عن كيفية استخدام
واجهة برمجة تطبيقات Reflection :
مثال 1:الحصول على الفئة الأصل لفصل معين:
مثال 2:الحصول على الوثائق الخاصة
getUserName()
:
$method = new ReflectionMethod('Profile', 'getUserName'); var_dump($method->getDocComment()); => output: string(33) "/** * @return string */"
مثال 3:يمكن استخدامه
instanceOf
و
is_a()
للتحقق من صحة الكائنات:
$class = new ReflectionClass('Profile'); $obj = new Profile(); var_dump($class->isInstance($obj));
مثال 4:في بعض الحالات ، قد تتعثر في اختبار الوحدة وتتساءل: "كيف يمكنني اختبار وظيفة خاصة؟"
لا تقلق ، إليك الخدعة:
الأمثلة السابقة بسيطة للغاية ، ولكن هناك أمثلة أخرى يمكنك من خلالها معرفة كيفية استخدام
واجهة برمجة تطبيقات Reflection على نطاق أوسع:
- منشئ وثائق API : تستخدم حزمة المولد lavarel-apidoc مولدًا واسعًا ReflectionClass و ReflrectionMethod للحصول على معلومات حول كتل الوثائق للفئات والأساليب ومعالجتها لاحقًا ، ولتصميم كتل الكود البرمجية هذه.
- حاوية حقن التبعية : يمكنك التحقق من الموضوع بأكمله هنا
4. الخلاصة
يوفر PHP
واجهة برمجة تطبيقات Reflection كاملة تساعدك في الوصول بسهولة إلى مناطق مختلفة من هياكل OOP.
5. المراجع
من المترجم:يمكنك أيضًا مشاهدة مثال على استخدام واجهة برمجة تطبيقات Reflection في حزمة Codeception في الفئة Stub .
تساعد هذه الفئة من خلال الانعكاس على تراجع الأساليب والخصائص في اختبارات الوحدة.
يجب إضافة أن واجهة برمجة تطبيقات Reflection تعمل ببطء إلى حد ما ، لذا يجب ألا تشارك بشكل كبير. يوصى باستخدامه في الاختبارات أو أثناء تصحيح الأخطاء ، ولكن إذا كان يمكنك الاستغناء عنه ، فمن الأفضل القيام بذلك. وليس من المستحسن بشكل قاطع للاستخدام في رمز العمل للمشروع ، كما كما أنها ليست آمنة.