Question

Je suis en train de reformater ma classe (voir ci-dessous) - Je pense que je fait l'erreur de mettre tout avec la même visibilité dans ma classe, alors que les propriétés devraient vraiment être privé et getters / setters devraient être rendus publics dans la plupart cas.

Pour saisir une propriété que je fais juste $ path-> propertyname mais je l'ai remarqué ses pratiques d'avoir plus setters / getters. Si je devais mettre en œuvre getters, dois-je faire un pour chaque propriété ou puis-je faire une 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 retourneraient le contrôleur propriété privée? Est-il courant d'avoir un getter plus générique / poseur ou même une méthode hybride qui obtient et jeux pour moi?

Voici 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
    }
}
Était-ce utile?

La solution

Avoir setters et getters en vous cas est inutile.

Dans le cas où vous avez à faire quoi que ce soit en dehors de contrôleur de retour, vous n'avez pas besoin getter que vous ne avez pas besoin setter si vous ne faites rien à la propriété après qu'il a été défini.

Si vous voulez vraiment accesseurs, vous pouvez utiliser __get et __set méthodes magiques pour toutes vos propriétés. Mais cela est tout à fait inutile si le cas est comme je l'ai décrit ci-dessus.

Autres conseils

jeter un oeil à la surcharge en php: http://php.net/overload

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

Les objets PHP ont une belle méthodes magiques (bien que Je ne l'utilise tous parce qu'il peut être déroutante). Celui que vous cherchez peut-être est __get () et __set () . Vous auriez encore à factoriser tous votre code si vous choisissez de faire vos champs de données privées (que vous devez afin que vous n'avez pas votre autre code d'accès à des champs de manière incorrecte. En procédant ainsi, contribue à rendre votre code un peu mieux et plus facile à maintenir.

Bien, 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 champ. De plus, je suis plus d'un développeur Java qu'un développeur PHP.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top