PHP: فصول الصديق ودالة/فئة المتصل Ungreedy
-
22-09-2019 - |
سؤال
هل هناك أي طريقة للحصول على وظيفة المتصل بشيء آخر غير debug_backtrace ()؟
أنا أبحث عن طريقة أقل جشعًا لمحاكاة النطاقات مثل صديق أو داخلي.
لنفترض أن لدي فئة أ وفئة ب.
حتى الآن ، كنت أستخدم debug_backtrace()
, ، وهو جشع للغاية (IMHO).
فكرت في شيء مثل هذا:
<?php
class A
{
public function __construct(B $callerObj) {}
}
class B
{
public function someMethod()
{
$obj = new A($this);
}
}
?>
قد يكون الأمر على ما يرام إذا كنت ترغب في قصرها على فصل واحد محدد ، ولكن دعنا نقول أن لدي 300 فئة ، وأريد أن أقصرها على 25 منها؟
طريقة واحدة يمكن أن تستخدم واجهة لتجميع:
public function __construct(CallerInterface $callerObj)
لكنها لا تزال رمز قبيح.
علاوة على ذلك ، أنت لا يمكن استخدم هذه الخدعة ثابتة الطبقات.
هل لديك أي فكرة أفضل؟
المحلول
تستطيع الاتصال debug_backtrace(FALSE)
, ، والتي لن تملأ فهرس الكائن. سيؤدي ذلك إلى تسريعه قليلاً ، ولكن بشكل عام ، يجب تجنب debug_backtrace في رمز الإنتاج ، ما لم يكن تطبيقك أداة برنامج حيث لا تكون السرعة مشكلة أو عند استخدامها لمعالجة الأخطاء.
من ما أفهمه ، تريد ذلك
- لديك إشارة ضمنية إلى المتصل المتاح في Callee و
- الوصول الخارجي إلى الخصائص الخاصة والمحمية إلى فصول محددة.
كلاهما غير موجود في PHP (ويكسر التغليف IMHO). للمناقشة ، يرجى الاطلاع
نصائح أخرى
PHP حقًا لا يوفر لك طريقة أنيقة للتعامل مع هذا. دون معنى لبدء فلاموير لغة ، سأقترح بحذر كبير أن مهارات التصميم والاحتياجات الخاصة بك قد تجاوزت حدود أداتك. PHP هي لغة برمجة خفيفة الوزن تحتوي على الكثير من ميزات Pseudo-op التي تم تثبيتها عليها ، ولكن في جوهرها ، لم تكن مصممة على الإطلاق لعمارة المؤسسة الأنيقة.