Page 1 sur 1

Conflit entre une class et un getter

Posté : 13 oct. 2011, 08:27
par soycd
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);
            }
        }
    }

Re: Conflit entre une class et un getter

Posté : 13 oct. 2011, 08:42
par xTG
Categorie() === __construct() ;)
Renommes le plutôt en getCategorie().

Re: Conflit entre une class et un getter

Posté : 13 oct. 2011, 09:04
par soycd
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.

Re: Conflit entre une class et un getter

Posté : 13 oct. 2011, 13:49
par moogli
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 ?)

@+

Re: Conflit entre une class et un getter

Posté : 13 oct. 2011, 14:13
par soycd
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: