PHPの子クラスによってメソッドがオーバーライドされているかどうかチェックできますか?php子クラスでメソッドがオーバーライドされているかどうかを調べる
<!-- language: lang-php -->
class foo {
protected $url;
protected $name;
protected $id;
var $baz;
function __construct($name, $id, $url) {
$this->name = $name;
$this->id = $id;
$this->url = $url;
}
function createTable($data) {
// do default actions
}
}
子供クラス:
class bar extends foo {
public $goo;
public function createTable($data) {
// different code here
}
}
このクラスのメンバとして定義されたオブジェクトの配列を反復処理するとき、どのように私は古いものとは対照的に、新しいメソッドを持つオブジェクトのどの確認することができますか? method_overridden(mixed $object, string $method name)
のような機能はありますか?
foreach ($objects as $ob) {
if (method_overridden($ob, "createTable")) {
// stuff that should only happen if this method is overridden
}
$ob->createTable($dataset);
}
私はtemplate method patternを認識していますが、のは、私はプログラムの制御は、クラスやメソッドそのものとは別のようにしたいとしましょう。これを達成するには、method_overridden
のような関数が必要です。
、またはオーバーライドされましたか?私はPHPがメソッドオーバーロードを持っていないと思った –
私はover-riddenを意味した、はい – Joey
あなたはこれを試すことができる:http://www.php.net/manual/en/reflectionclass.hasmethod.php –