هل يمكنني استخدام مثيل أساليب خاصة كما الاسترجاعات؟

StackOverflow https://stackoverflow.com/questions/1028035

  •  06-07-2019
  •  | 
  •  

سؤال

وبلدي سيناريو معين ينطوي على القيام ببعض تحويل النص باستخدام عبارات عادية داخل أسلوب خاص. استدعاء الأسلوب الخاص preg_replace_callback، ولكن يبدو أن الاستدعاء يجب أن تكون الجماهير على الأشياء، لذلك أنا عالقة الخروج من العالم الخاص والكشف عن تفاصيل التنفيذ عندما كنت تفضل ذلك.

وهكذا، وباختصار: هل يمكنني استخدام أسلوب مثيل بمثابة رد دون أن تفقد التغليف

وشكرا.

هل كانت مفيدة؟

المحلول

نعم، يبدو أنه يمكنك:

<?php

//this works
class a {
   private function replaceCallback($m) { return 'replaced'; }

   public function test() {
        $str = " test test ";
        $result = preg_replace_callback('/test/', array($this, 'replaceCallback'), $str);
        echo $result;
   } 
}

$a = new a();
$a->test();


//this doesn't work
$result = preg_replace_callback('/test/', array(new a(), 'replaceCallback'), ' test test ');    
echo $result;

وهكذا يبدو أن preg_replace_callback()، أو آلية رد PHP، هو علم نطاق الذي كان يطلق عليه.

واختبارها على 5.2.8

نصائح أخرى

هل قمت بإنشاء فئة المساعد منفصلة لمعالجة النصوص، وخلق أسلوب رد ضمن تلك الفئة (يمكن أن يكون العام هناك)؟ يمكنك تمرير في إشارة إلى الطبقة الأصلية (كائن) إذا كنت بحاجة إلى الوصول إلى البيانات مثيل محددة.

واجهة عامة لفئة الرئيسي الخاص بك لا تزال متماسكة ونظيفة، ويمكنك سحب معالجة سلسلة محددة من فئة ربما لا تنتمي في أي حال ...

هل كنت لا تستخدم المحمية؟ كنت بحاجة لمعرفة ما هي العلاقة بين هاتين الطبقتين في علاقتها ببعضها البعض لتكون أكثر وضوحا، ولكن يجب أن تكون قادرة على توسيع الطبقة واستخدام الأساليب المحمية الجديدة التي ورثت دون جعلها الجمهور.

وآمل أن يساعد هذا!

وهتاف

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