يطبق المرقع إعادة تعريف (صياغة القرد) للوظائف والأساليب في PHP. يتضمن ذلك كل من callables المعرفة من قبل المستخدم والداخلية ، والتي يمكن أن تكون وظائف أو طرق فئة أو طرق مثيل. بالإضافة إلى ذلك ، يتم دعم العديد من التركيبات الشبيهة بالوظائف ، مثل exit
أو include
، بطريقة مماثلة.
داخليًا ، يستخدم Patchwork غلاف دفق في file://
. في حالة الوظائف والأساليب المعرفة من قبل المستخدم ، يتم استخدامه لحقن مقتطف اعتراضية بسيطة لبداية كل من هذا القبيل. بالنسبة للأنواع المتبقية من Callables ، يتم تطبيق استراتيجيات أخرى مختلفة.
use function Patchwork {redefine, relay, getMethod};
$ profiling = fopen ( ' profiling.csv ' , ' w ' );
redefine ( ' App* ' , function (... $ args ) use ( $ profiling ) {
$ begin = microtime ( true );
relay (); # calls the original definition
$ end = microtime ( true );
fputcsv ( $ profiling , [ getMethod (), $ end - $ begin ]);
});
restoreAll()
restore($handle)
ينهي عمر ، على التوالي ، جميع عمليات إعادة التعريف ، أو واحدة منها فقط ، حيث $handle = redefine(...)
.$this
يتم إعادة ربط هذا تلقائيًا بالفئة المرفقة للطريقة التي يتم إعادة تعريفها.__CLASS__
، static::class
الخ. يجب استخدام getClass()
، getCalledClass()
، و getMethod()
و getFunction()
من مساحة الاسم Patchwork
بدلاً من ذلك. يمكن استخدام الترقيع لاستئصال الأساليب الثابتة ، والتي ، مع ذلك ، هي ممارسة مثيرة للجدل.
يجب أن يتم تطبيقه بحكمة ، وهذا هو ، فقط بعد التعرف على عيوبه والإغراءات بلغات البرمجة الأخرى. على سبيل المثال ، في JavaScript و Ruby و Python وبعضها الآخر ، جعل الدعم الأصلي لتصبح قرد الاستخدامات المتعلقة بالاختبارات أكثر شيوعًا من PHP.
غالبًا ما لم تعد الاختبارات التي تستخدم عملية شراء القرود اختبارات الوحدة ، لأنها تصبح حساسة للتفاصيل عن التنفيذ ، وليس فقط إجراءات الواجهة: على سبيل المثال ، قد لا يمضي هذا الاختبار بعد التبديل من time()
إلى DateTime
.
ومع ذلك ، لا يزال لديهم مكانهم حيث يكون البديل الوحيد القابل للتطبيق اقتصاديًا لا يختبر على الإطلاق.
لا يتم اقتراح الترقيع لـ AOP وأنواع أخرى من استخدام الإنتاج. من المرجح أن يكون تأثيره على أداء التطبيق كبيرًا بشكل كبير. بالإضافة إلى ذلك ، على الرغم من عدم معروفة أو متوقعة لم يخاطر أمنية مرتبطة بالرقوع ، إلا أنه في اعتبارك أن الترقيع لم يتم تطويره أبدًا مع وضع بيئات الإنتاج في الاعتبار.