سؤال

كيف يمكن أن تساعدني وظائف رد الاتصال في تطويري؟وخاصة مع PHP.أنا جديد على لغة php والبرمجة نفسها ولكني رأيت قوة عمليات الاسترجاعات في مكتبات js مثل jquery.لقد عملت مع رد الاتصال في PHP ولكن تركت لي الكثير من الأسئلة حول هذا الموضوع:

  1. ما هو نطاق وظيفة رد الاتصال
  2. ما المعلمات التي يمكنني تمريرها إلى وظيفة رد الاتصال (إما ضمنيًا أو صريحًا)

إليك رمز من وثائق Kohana:

$post->add_callbacks('email', array($this, '_unique_email'));

// Define the callback method
/*
 * Callback method that checks for uniqueness of email
 *
 * @param  Validation  $array   Validation object
 * @param  string      $field   name of field being validated
 */
public function _unique_email(Validation $array, $field)
{
   // check the database for existing records
   $email_exists = (bool) ORM::factory('user')->where('email', $array[$field])->count_all();

   if ($email_exists)
   {
       // add error to validation object
       $array->add_error($field, 'email_exists');
   }
}

كيف يعمل رد الاتصال هذا؟من أين أتت المعلمات؟

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

المحلول

لا أعرف كوهانا، لكنني أفترض أن هذا يعني أنه عند التحقق من صحة البريد الإلكتروني، فإنه يستدعي _unique_email().

يمكن أن تساعدك عمليات الاسترجاعات في PHP في التطوير لتوفر لك طريقة سهلة لتوسيع التعليمات البرمجية الخاصة بك.على سبيل المثال:

$post = new Blog_Post();
$post->contents = $_POST['contents'];
$post->save();

سيؤدي هذا الجزء من التعليمات البرمجية إلى إنشاء منشور مدونة جديد وتعيين المحتويات وحفظه في قاعدة البيانات.ولكن لنفترض أنك تريد معالجة BBCode في المحتويات.كيف يمكنك القيام بذلك، دون الحاجة إلى تحرير فئة Blog_Post؟مع رد الاتصال.

$post = new Blog_Post();
$post->onSave('parseBBCode');
$post->contents = $_POST['contents'];
$post->save(); # Will call parseBBCode when saving the blog post.

function parseBBCode($contents) {
  # Parse BBCode and return the parsed contents.
}

من الواضح أن هناك طرقًا مختلفة لتنفيذ عمليات الاسترجاعات، لكنك قلت إنك تعرف قوة عمليات الاسترجاعات في JS، وهي دائمًا onClick وonLoad وonKeyUp وما إلى ذلك، لذلك أردت أن أعطي مثالًا يشبه هذا السلوك إلى حد ما.

آمل أن يكون هذا من أي مساعدة.فيما يتعلق بأسئلتك حول المعلمات، فهذا يعتمد على ما يتم تقديمه لرد الاتصال.في المثال الخاص بي، أي وظيفة يتم تشغيلها بواسطة onSave سيتم منحها فقط المعلمة $contents.

في blog_post، لدي وظيفة onSave()، والتي من شأنها تخزين الوظيفة التي سيتم استدعاؤها مرة أخرى، وبعد ذلك عندما كانت وظيفة save() تحاول حفظ منشور، فإنها ستستدعي أي عمليات رد اتصال تم تحديدها باستخدام onSave().آمل أن أكون واضحا بما فيه الكفاية.

بشكل أساسي، تعتمد الوسائط التي يتم تمريرها إلى عمليات الاسترجاعات على الوظائف التي تستدعيها.يمكنني أن أجعل الدالة save() تستدعي parseBBCode() مع أي وسيطات أريدها، ولكن يتم تحديدها بواسطة الوظيفة التي تستدعي رد الاتصال، وليس عن طريق رد الاتصال.ليس لدى رد الاتصال أي سيطرة على الوسائط التي يتم تمريرها إليه.

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