1

オブジェクトのクラスを現在のクラスと比較し、継承されたメソッドで親クラスを参照したい。これが私が考えることができる唯一の方法です:

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

self は継承されたメソッドで親クラスを参照するため、これは機能しますが、比較を行うたびにクラスをインスタンス化する必要があるのは過剰に思えます。

もっと簡単な方法はありますか?

4

2 に答える 2

0

確かにそうですが、継承には注意してください。

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

クラスがインターフェースを実装したり、抽象クラスを拡張したりすることを確認したい場合 (つまり、プラグイン、アダプターなど) に非常に便利です。

于 2009-10-16T09:24:56.140 に答える