Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مقدمة في الميثودات السحرية

جزء من قسم البرمجة كائنية التوجه في رحلة PHP على Coddy. الدرس 44 من 91.

الأساليب السحرية هي أساليب خاصة في PHP تبدأ بشرطتي سفلية مزدوجتين (__) ويتم automatically called بواسطة PHP استجابةً لأحداث أو إجراءات معينة. لقد استخدمت بالفعل اثنين منها: __construct() و__destruct().

تتيح لك هذه الأساليب الاندماج في السلوك الداخلي لـ PHP وتخصيص كيفية استجابة كائناتك للعمليات الشائعة.

على سبيل المثال، ماذا يحدث عندما تحاول طباعة object؟ أو الوصول إلى properties غير موجودة؟ تمنحك magic methods التحكم في هذه المواقف.

إليك نظرة سريعة على أكثر أساليب السحر استخدامًا:

Methodمتى يتم تشغيله
__construct()يتم إنشاء Object
__destruct()يتم تدمير Object
__toString()يتم استخدام Object كسلسلة نصية
__get()الوصول إلى خاصية غير معرّفة
__set()تعيين خاصية غير معرّفة
__call()استدعاء method غير معرّفة
__clone()يتم استنساخ Object
<?php
class Book {
    public function __construct(
        private string $title
    ) {}
    
    public function __toString(): string {
        return "Book: " . $this->title;
    }
}

$book = new Book("PHP Mastery");
echo $book;

المخرجات:

Book: PHP Mastery

من دون __toString()، ستؤدي محاولة echo إلى استخدام object إلى حدوث خطأ. تعترض magic method هذا الإجراء وتُرجع تمثيلًا من نوع string بدلًا من ذلك. في الدروس القادمة، سنستكشف كل magic method بالتفصيل.

challenge icon

التحدي

سهل

لنَبْنِ نظامًا لفهرس أفلام يعرّفك على magic methods. ستنشئ فئة Movie تستخدم __construct() لتهيئة بيانات الفيلم، و__toString() لتوفير تمثيل string منسّق عند طباعة object.

ستنظّم التعليمات البرمجية عبر ملفين:

  • Movie.php: أنشئ فئة Movie تمثّل الأفلام في فهرسك. استخدم constructor promotion لتعريف properties private لـ $title (string)، و$director (string)، و$year (integer). Implement أسلوب magic __toString() كي يعيد string formatted: "[title] ([year]) - Directed by [director]". يتيح ذلك لـ objects الخاصة بالأفلام أن تكون echoed مباشرةً دون استدعاء method منفصل.
  • main.php: ضمّن ملف Movie. ستتلقى ثلاث قيم إدخال: عنوان فيلم، واسم director، وسنة الإصدار. أنشئ instance من Movie using هذه values (حوّل السنة إلى integer). ثم نفّذ echo للـ object مباشرةً: سيتم automatically استدعاء method __toString() لإنتاج Output.

تكمن روعة __toString() في أن PHP تستدعيه automatically كلما استُخدم object الخاص بك في سياق string. وبدلًا من كتابة echo $movie->getInfo();، يمكنك ببساطة كتابة echo $movie;، وتتولى PHP عملية التحويل نيابةً عنك. وهذا يجعل التعامل مع objects الخاصة بك أكثر سهولة وبديهية.

جرّب بنفسك

<?php

require_once 'Movie.php';

// قراءة المدخلات
$title = trim(fgets(STDIN));
$director = trim(fgets(STDIN));
$year = intval(fgets(STDIN));

// TODO: أنشئ كائن Movie باستخدام قيم المدخلات

// TODO: اطبع كائن الفيلم مباشرة (سيتم استدعاء الدالة __toString() تلقائيًا)

?>
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم PHP عبر الإنترنت