سؤال

أريد مقارنة فئة كائن مع الفئة الحالية ، وفي الأساليب الموروثة للإشارة إلى الفئة الأصل. هذه هي الطريقة الوحيدة التي يمكنني التفكير بها في القيام بذلك:

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

من المفيد جدًا إذا كنت تريد التأكد من أن الفصل يبرز واجهة أو يمتد فئة مجردة (أي للإضافات والمحولات ...)

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