2009-08-17 7 views
1

Je suis en train de reformater ma classe (voir ci-dessous) - Je pense que j'ai fait l'erreur de tout mettre avec la même visibilité dans ma classe, alors que les propriétés devraient vraiment être les privés et les getters/setters devraient être publics dans la plupart des cas.Setters/Getters, Visibility [OOP] en ​​PHP

Pour saisir une propriété, je fais simplement $ path-> propertyname mais j'ai remarqué qu'il est plus pratique d'avoir des setters/getters. Si je devais implémenter des getters, devrais-je en faire un pour chaque propriété ou puis-je en faire un pour toute la classe? Ainsi, par exemple dire que je veux obtenir le nom du contrôleur ...

public function getController() { 
    return $this->controller; 
} 

Et ce serait retourner le contrôleur propriété privée? Est-il courant d'avoir un getter/setter plus générique ou même une méthode hybride qui obtient et ensembles pour moi?

est ici la structure de classe (seulement propriétés/méthodes):

class urlParser { 

    public static $url  = ''; 
    public static $controller = ''; 
    public static $baseController = ''; 
    public static $urls  = ''; 
    public static $template  = ''; 
    public static $captures  = ''; 
    public static $contentXML = ''; 

    function __construct($urls) { 

     $this->urls = $urls; 

     $this->baseController = $urls['default']; 

     $this->get_url(); 
    } 

    public function get_url() { 
     // sets following properties: 
     // url, template, controller, contentXML, baseController 
    } 
} 
+1

Pourriez-vous mettre à jour votre question pour rendre les questions plus évidentes? Personne ne verra tout ce code avant de savoir ce que vous demandez. – Blixt

+0

Ok - mis à jour ma question à quelque chose d'un peu plus simple. –

Répondre

1

Avoir des setters et getters dans votre cas est inutile

Si vous devez faire autre chose que renvoyer le contrôleur, vous n'avez pas besoin de getter car vous n'avez pas besoin de setter si vous ne faites rien avec la propriété après qu'elle a été placée.

Si vous voulez vraiment des getters et setters, vous pouvez utiliser les méthodes magic __get et __set pour toutes vos propriétés. Mais cela est totalement inutile si le cas est tel que je l'ai décrit ci-dessus.

0

un coup d'oeil à la surcharge en php: http://php.net/overload

il y a deux méthodes magiques __get() et __set() qui pourrait faire exactement ce que vous voulez

0

Les objets PHP ont quelques bons magic methods (bien que je ne les utilise pas tous car il peut être déroutant). Celui que vous cherchez est __get() et __set(). Vous devrez toujours refactoriser tout votre code si vous choisissez de rendre vos champs de données privés (ce que vous devriez faire pour que vos autres champs d'accès au code ne soient pas incorrects.) Cela rendra votre code un peu meilleur et plus facile à maintenir.

Bien que, j'essaie généralement d'avoir des accesseurs pour chaque champ de données privées parce que vous pouvez facilement voir une validation pour chaque domaine. de plus, je suis plus d'un développeur Java qu'un développeur PHP.

Questions connexes