الدالة is_subclass_of()‎‎ في PHP

من موسوعة حسوب
< PHP

(PHP 4 >= 4.2.0, PHP 5, PHP 7)

تتحقق الدالة is_subclass_of()‎‎‎‎‎‎‎ فيما إذا كان يملك الكائن صنفًا ما كواحد من الأصناف الآباء له أو ينفذه.

الوصف

bool is_subclass_of ( mixed $object , string $class_name [, bool $allow_string = TRUE ] )

تتحقق الدالة is_subclass_of()‎‎‎‎‎‎‎  فيما إذا كان الصنف class_name هو واحد من الأصناف الآباء للكائن object.

المعاملات

object

اسم الصنف أو نسخة الكائن. لن يولَّد خطأ إذا لم يكن الصنف موجودًا.

class_name

اسم الصنف.

allow_string

إذا ضُبِطَت قيمة هذا المعامل إلى القيمة FALSE، فلا يُسمح عندئذٍ باستخدام اسم صنف على شكل سلسلة نصية كقيمة للمعامل object. يمنع هذا أيضًا استدعاء autoloader إذا لم يكن الصنف موجودًا.

القيم المعادة

تُعيد الدالة is_subclass_of()‎‎‎‎‎‎‎ القيمة TRUE  إذا كان الكائن object ينتمي إلى صنف هو صنف فرعي من الصنف class_name،  وإلاّ فإنها تُعيد القيمة FALSE.

سجل التغييرات

الإصدار الوصف
5.3.9 أُضيف المعامل allow_string.
5.3.7 أُضيف دعم إلى class_name ليعمل مع الواجهات.
5.0.3 يمكنك تحديد المعامل object بسلسلة نصية (اسم الصنف).

أمثلة

المثال 1: مثال عن استخدام الدالة is_subclass_of()‎

<?php
// ‏تعريف صنف
class WidgetFactory
{
  var $oink = 'moo';
}

// تعريف صنف ابن
class WidgetFactory_Child extends WidgetFactory
{
  var $oink = 'oink';
}

// تعريف كائن جديد‏
$WF = new WidgetFactory();
$WFC = new WidgetFactory_Child();

if (is_subclass_of($WFC, 'WidgetFactory')) {
  echo "yes, \$WFC is a subclass of WidgetFactory\n";
} else {
  echo "no, \$WFC is not a subclass of WidgetFactory\n";
}


if (is_subclass_of($WF, 'WidgetFactory')) {
  echo "yes, \$WF is a subclass of WidgetFactory\n";
} else {
  echo "no, \$WF is not a subclass of WidgetFactory\n";
}


// PHP 5.0.3قابل للاستخدام فقط منذ الإصدار ‏
if (is_subclass_of('WidgetFactory_Child', 'WidgetFactory')) {
  echo "yes, WidgetFactory_Child is a subclass of WidgetFactory\n";
} else {
  echo "no, WidgetFactory_Child is not a subclass of WidgetFactory\n";
}
?>

سينتج المثال السابق الناتج الآتي:

yes, $WFC is a subclass of WidgetFactory
no, $WF is not a subclass of WidgetFactory
yes, WidgetFactory_Child is a subclass of WidgetFactory

المثال 2: مثال عن استخدام الدالة is_subclass_of()‎ مع واجهة

<?php
// ‏تعريف الواجهة
interface MyInterface
{
  public function MyFunction();
}

// تعريف تنفيذ الصنف للواجهة‏
class MyClass implements MyInterface
{
  public function MyFunction()
  {
    return "MyClass Implements MyInterface!";
  }
}

// نسخ الكائن‏
$my_object = new MyClass;

// يعمل منذ الاصدار 5.3.7‏

// اختبار استخدام نسخة الكائن للصنف‏
if (is_subclass_of($my_object, 'MyInterface')) {
  echo "Yes, \$my_object is a subclass of MyInterface\n";
} else {
  echo "No, \$my_object is not a subclass of MyInterface\n";
}

// اختبار استخدام السلسلة النصية لاسم الصنف‏
if (is_subclass_of('MyClass', 'MyInterface')) {
  echo "Yes, MyClass is a subclass of MyInterface\n";
} else {
  echo "No, MyClass is not a subclass of MyInterface\n";
}
?>

سينتج المثال السابق الناتج الآتي:

Yes, $my_object is a subclass of MyInterface
Yes, MyClass is a subclass of MyInterface

ملاحظات

ملاحظة: عند استخدام هذه الدالة ستُستخدَم أيّة تحميلات تلقائية autoloaders مُسجلة إذا لم يكن الصنف مُعرَّفًا من قبل.

انظر أيضًا

  • الدالة get_class()‎‎‎‎: إعادة اسم الصنف لكائن.
  • الدالة get_parent_class()‎‎‎‎‎‎: الحصول على اسم الصنف الأب لكائن أو لصنف.
  • الدالة is_a()‎‎‎‎‎: التحقق فيما إذا كان الكائن من صنفٍ ما أو يملك ذاك الصنف كواحد من الأصناف الآباء له.
  • الدالة class_parents()‎‎‎‎‎‎: إعادة الأصناف الآباء للصنف المُعطى.

مصادر