سؤال

هل هناك أي طريقة للحصول على وظيفة المتصل بشيء آخر غير 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 التي تم تثبيتها عليها ، ولكن في جوهرها ، لم تكن مصممة على الإطلاق لعمارة المؤسسة الأنيقة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top