parent:: macht den Methoden-Namen bei __call() lowercase

Wenn eine PHP-Klasse die Methode __call() besitzt, wird diese beim Versuch eine nicht existierende Methode aufzurufen, aufgerufen, anstatt einen Fehler zu erzeugen.

Im ersten Parameter steht dann der Name der Methode und im zweiten Parameter stehen die Argumente die an die nicht existierenden Methode übergeben wurden… Soweit, so klar.

Wird __call() aber über parent:: aktiviert, wird der erste Parameter, also der Methoden-Name seltsamerweise lowercase. Dieses Verhalten zeigt zumindest PHP 5.2.9.

Das folgende Code-Beispiel zeigt, was genau gemeint ist.

<?php
class Daddy
{
    function __call($method, $args)
    {
        echo 'class: '.get_class($this).', method: '.$method."n";
    }
}

class Son extends Daddy
{
    function getSomeData()
    {
        return parent::getSomeData();
    }
}

$daddy = new Daddy();
echo $daddy->getSomeData();

$son = new Son();
echo $son->getSomeData();

Die Ausgabe ist:

class: Daddy, method: getSomeData
class: Son, method: getsomedata

Was der Sinn davon ist, weiss ich leider nicht. Ich vermute mal einen Bug in PHP.