انتقل إلى محتوى الدرس

Runtime Introspection with instanceof فحص الأصناف والدوال بـ instanceof و method_exists

أنشئ كائنات فورية عبر new class، وخزّن الكائنات بأمان عبر __serialize و__unserialize، وافحص الأصناف والدوال في وقت التشغيل.
1 صفوف تعليمية
PHP
0 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

يوفر PHP المعامل instanceof ودوال فحص سريعة للتحقق من صنف الكائن وسلسلة وراثته والواجهات التي يطبقها وقت التشغيل.

  • يُرجع التعبير $obj instanceof TargetType القيمة true إذا كان الكائن من نفس الصنف أو يرث منه أو يطبق تلك الواجهة.
  • استخدم get_debug_type($val) (في PHP 8.0+) أو $obj::class لمعرفة اسم الصنف الفعلي للكائن وقت التشغيل.
  • استخدم method_exists($obj, 'name') وproperty_exists($obj, 'prop') لفحص وجود الدوال والخصائص برمجياً.

يتحقق الكود من تطبيق الواجهة عبر instanceof، ويقرأ اسم الصنف عبر $rep::class، ويؤكد وجود الدالة toCsv().

الأداة / الدالةالوظيفة الأساسيةمثال
$obj instanceof TypeChecks class, parent class, or interface match$r instanceof Exportable
$obj::classReturns exact class name string (PHP 8.0+)"SalesReport"
method_exists($o, $m)Checks if method is defined on object/classmethod_exists($r, "toCsv")
unserialize($s, $opts)Restores object with class whitelist["allowed_classes" => [Safe::class]]

PHP
<?php
interface Exportable { public function toCsv(): string; }
class SalesReport implements Exportable {
    public function toCsv(): string { return "id,total"; }
}
$rep = new SalesReport();
echo ($rep instanceof Exportable ? "Exportable" : "No") . " | ";
echo $rep::class . " | ";
echo (method_exists($rep, "toCsv") ? "has toCsv()" : "missing") . "\n";
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

يوفر PHP المعامل instanceof ودوال فحص سريعة للتحقق من صنف الكائن وسلسلة وراثته والواجهات التي يطبقها وقت التشغيل. يُرجع التعبير $obj instanceof TargetType القيمة true إذا كان الكائن من نفس الصنف أو يرث منه أو يطبق تلك الواجهة. استخدم get_debug_type($val) (في PHP 8.0+) أو $obj::class لمعرفة اسم الصنف الفعلي للكائن وقت التشغيل. استخدم method_exists($obj, 'name') وproperty_exists($obj, 'prop') لفحص وجود الدوال والخصائص برمجياً.