Conflit entre une class et un getter

Eléphanteau du PHP | 44 Messages

13 oct. 2011, 08:27

Salut à tous

Sauriez-vous ce qui pourrait provoquer un conflit entre une classe et un getter de cette classe portant le même nom ?

J'ai une classe Categorie qui possède un getter categorie(), si je laisse en l'état le nom du getter, les attributs de mon objet Categorie prennent pour valeurs null #-o
Ils sont donc écrasés quelque part.

J'aimerais donc comprendre pourquoi.

Les parties concernées de mes classes.
class Categorie extends Recorder
{
    protected $id;
    protected $categorie;
    
    public function setId($id)
    {
        $this->id = (int)$id;
    }
    
    public function setCategorie($categorie)
    {
        $this->categorie = (string)$categorie;
    }
    
    public function id()
    {
        return $this->id;
    }
    
    public function categorie()
    {
        return $this->categorie;
    }
Recorder :
abstract class Recorder implements ArrayAccess
{
    protected static $templates = array();
    protected $templatePrefix;
    protected $template;
    protected $values;
    
    public function __construct(array $values, $templatePrefix = '')
    {
        //pre($values);
        $this->values = $values;
        $this->templatePrefix = $templatePrefix;
        $this->hydrate();
        $this->setTemplate();
        $this->template = self::$templates[$this->templatePrefix . strtolower(get_class($this))];
    }
    
    private function hydrate()
    {
        foreach( $this->values as $attribut => $value)
        {
            $method = 'set'. ucwords($attribut);
            if( method_exists($this, $method) )
            {
                $this->$method($value);
            }
        }
    }

ViPHP
xTG
ViPHP | 7331 Messages

13 oct. 2011, 08:42

Categorie() === __construct() ;)
Renommes le plutôt en getCategorie().

Eléphanteau du PHP | 44 Messages

13 oct. 2011, 09:04

Merci, c'est un peu ce dont je me doutais, mon getter categorie() recréerait donc une instance de sa propre classe.

Mais dans ce cas, pourquoi je n'obtiens pas d'erreur, puisque aucuns arguments ne sont fournis ?
On dirait que ça fonctionne comme une sorte de surcharge.

Je comprend pas trop le mécanisme interne qui se produit.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

13 oct. 2011, 13:49

mon getter categorie() recréerait donc une instance de sa propre classe.
non c'est le constructeur de la classe, php chercher __construct() et s'il ne le trouve pas une méthode qui porte le nom de la classe. (rétro compatibilité php 4 :mrgreen: ).

Donc quand tu créer une instance de catégorie tu renvoie la valeur de la propriété $categorie c'est assez étonnant ^^

Par contre a priori pas de soucis si tu ne fait pas appel au constructeur parent ..... (a voir en fonction du niveau d'erreur peut être ?)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 44 Messages

13 oct. 2011, 14:13

non c'est le constructeur de la classe, php chercher __construct() et s'il ne le trouve pas une méthode qui porte le nom de la classe. (rétro compatibilité php 4 :mrgreen: ).
Arf, quelle burne je fais, j'avais complètement oublié ça 8-|

Merci à vous deux :wink: