Liebe PHP'ler,
in PHP4 habe ich für meine Klasse immer eine Funktion gleichen Namens als Konstruktor geschrieben, wobei ich immer die Groß-/Kleinschreibung beachtet habe:
class Search {
var data;
function Search () {
// ich bin der Konstruktor
}
function load_data () {
}
}
In PHP5 habe ich mir angewöhnt, __construct() als Konstruktor zu notieren:
class Search {
private data;
public function __construct () {
// ich bin der Konstruktor
}
private function load_data () {
}
private function search () {
// ich bin nicht der Konstruktor!
}
}
Nun nutze ich aber (zum ersten Mal, daher wahrscheinlich meine Frage) Vererbung, um "don't repeat yourself" umzusetzen:
abstract class Plugin {
public i18n;
public function __construct () {
// ich bin der Konstruktor
$this->i18n = array(
'de' => array(),
'en' => array()
);
}
public function translate ($s) {
}
}
class Search extends Plugin {
private data;
// Konstruktor steht in der Elternklasse
private function load_data () {
}
private function search () {
// ich soll jetzt ein Konstruktor sein?!?
}
}
Da in der Klasse "Search" die Konstruktorfunktion "__construct" nicht mehr explizit notiert ist (sie steht ja jetzt in der Elternklasse "Plugin"), versucht PHP5 wie seinerzeit in PHP 4 die anscheinend gleichlautende private Funktion "search" als Konstruktorfunktion zu verwenden, auch wenn die Groß-/Kleinschreibung sich unterscheidet und obwohl durch die Vererbung eine explizite Konstruktorfunktion namens "__construct" gegeben ist.
Um die Kompatibilität zu PHP4 zu erhalten kann ich schon nachvollziehen, dass bei Nichtvorhandensein einer explizit notierten Funktion "__construct" eine gleichlautende Funktion als Konstruktorersatz gesucht wird. Aber muss das in PHP5 auch noch case-insensitive erfolgen?
Also: Ist das ein Bug oder ein Feature von PHP5?
Liebe Grüße,
Felix Riesterer.
ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)