elephpant

Exécution de méthode statique et héritage

PHP et sa vision de la surcharge de méthode statique

Date de publication : 2008-12-05

J'ai toujours douter du fonctionnement de PHP en cas de surcharge de méthode statique, mais bon comme il faut faire avec je vous donne une petite explication du problème et une "solution".

Exemple qui pose problème :


class Animal
{
public function __construct ()
{
var_dump(array(
'class' => get_class($this) ,
'cri' => self::pousseTonCri()
));
}
public static function pousseTonCri ()
{
return 'AAAAAAAAAAAAAAAAAAA';
}
}
class Chien extends Animal
{
public static function pousseTonCri ()
{
return 'Wouaf Wouaf';
}
}
$chien = new Chien();

Cette exemple m'affiche en php5 :


array
'class' => string 'Chien'
'cri' => string 'AAAAAAAAAAAAAAAAAAA'

Alors que je m'attendais a un chien qui fait Wouaf Wouaf.
Donc pour résoudre ce problème voici mes nouvelles classes pour avoir un chien qui fait Wouaf Wouaf en statique :


class Animal
{
public function __construct ()
{
var_dump(array(
'class' => get_class($this),
'cri' => call_user_func(array(get_class($this), 'pousseTonCri'))
));
}
public static function pousseTonCri ()
{
return 'AAAAAAAAAAAAAAAAAAA';
}
}
class Chien extends Animal
{
public static function pousseTonCri ()
{
return 'Wouaf Wouaf';
}
}
$chien = new Chien();

Mon chien qui fait Wouaf Wouaf :


array
'class' => string 'Chien'
'cri' => string 'Wouaf Wouaf'

HourraaaaaaaaAAAAAAAAAAAAAAAAAAAAAAAh !!!

A noter que depuis la version 5.3 de php il est possible de remplacer :


call_user_func(array(get_class($this), 'pousseTonCri')

Par :


get_class($this)::pousseTonCri()

 
 

b1n@sp1n