كيف يمكنني مقارنة كائن مع فئة الأصل في PHP؟
-
21-09-2019 - |
سؤال
أريد مقارنة فئة كائن مع الفئة الحالية ، وفي الأساليب الموروثة للإشارة إلى الفئة الأصل. هذه هي الطريقة الوحيدة التي يمكنني التفكير بها في القيام بذلك:
class foo { function compare($obj) { return get_class($obj) == get_class(new self); } }
class bar extends foo { }
$foo = new foo;
$foo->compare(new foo); //true
$foo->compare(new bar); //false
$bar = new bar;
$bar->compare(new foo); //true
$bar->compare(new bar); //false
يعمل هذا لأن الذات تشير إلى فئة الوالدين في الأساليب الموروثة ، ولكن يبدو من المفرط أن تضطر إلى إنشاء فئة في كل مرة أرغب فيها في إجراء مقارنة.
هل هناك طريقة أبسط؟
المحلول
يمكنك استخدام __CLASS__
ثابت السحر:
return get_class($obj) == __CLASS__;
أو حتى مجرد استخدام get_class () بدون حجة:
return get_class($obj) == get_class();
نصائح أخرى
نعم بالتأكيد ، ولكن احذر من الميراث.
class Foo;
class Bar extends Foo;
$foo = new Foo();
if($foo instanceof Foo) // true
if($foo instanceof Bar) // false
$bar = new Bar();
if($bar instanceof Foo) // true
if($bar instanceof Bar) // true
من المفيد جدًا إذا كنت تريد التأكد من أن الفصل يبرز واجهة أو يمتد فئة مجردة (أي للإضافات والمحولات ...)
لا تنتمي إلى StackOverflow