Czy można sprawdzić, czy metoda została nadpisana przez klasę potomną w PHP?Sprawdzanie php, czy metoda została przesłonięta w klasie potomnej
<!-- 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
}
}
klasa dziecka:
class bar extends foo {
public $goo;
public function createTable($data) {
// different code here
}
}
Kiedy iteracja tablicę obiektów zdefiniowanych jako członków tej klasy, w jaki sposób mogę sprawdzić, które z obiektów ma nową metodę, w przeciwieństwie do starego? Czy istnieje funkcja taka jak 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);
}
Jestem świadomy template method pattern, ale powiedzmy, że chcę sterowanie programem być oddzielone od klasy i samych metod. Aby to osiągnąć, potrzebowałbym funkcji, takiej jak method_overridden
.
przeciążony lub nadpisane? Myślałem, że PHP nie ma metody przeciążania –
Mam na myśli nadmierne, tak – Joey
Możesz spróbować tego: http://www.php.net/manual/en/reflectionclass.hasmethod.php –