Felix Riesterer: Bug oder Feature?

Beitrag lesen

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:)