Domanda

Sto riformattando la mia classe (vedi sotto): penso di aver commesso l'errore di impostare tutto con la stessa visibilità nella mia classe, mentre le proprietà dovrebbero in realtà essere private e getter/setter dovrebbero essere pubbliche nella maggior parte dei casi.

Per acquisire una proprietà faccio semplicemente $path->propertyname ma ho notato che è più pratico avere setter/getter.Se dovessi implementare i getter, dovrei crearne uno per ogni proprietà o posso crearne uno per l'intera classe?Quindi, ad esempio, dì che voglio ottenere il nome del controller...

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

E questo restituirebbe al controllore la proprietà privata?È comune avere un getter/setter più generico o anche un metodo ibrido che ottiene E set per me?

Ecco la struttura della classe (solo proprietà/metodi):

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
    }
}
È stato utile?

Soluzione

Avere setter e getter in voi caso è inutile.

Nel caso in cui si deve fare nulla oltre il ritorno del controller, non è necessario getter come non hai bisogno di setter se non fai niente con la proprietà dopo che è stato impostato.

Nel caso in cui si vuole veramente getter e setter, è possibile utilizzare __get e __set metodi magici per tutte le proprietà. Ma questo è del tutto inutile se il caso è, come ho descritto sopra.

Altri suggerimenti

dare un'occhiata al sovraccarico in php: http://php.net/overload

ci sono due metodi di magia __get() e __set() che potrebbero fare esattamente quello che vuoi

Gli oggetti PHP ne hanno alcuni carini metodi magici (anche se non li uso tutti perché può creare confusione).Quello che potresti cercare è __Ottenere() E __impostato().Dovresti comunque rifattorizzare tutto il tuo codice se scegli di rendere privati ​​i tuoi campi dati (cosa che dovresti fare in modo da non avere l'altro codice che accede ai campi in modo errato.Farlo in questo modo aiuta a rendere il tuo codice un po' migliore e più facile da mantenere.

Tuttavia, di solito cerco di avere getter e setter per ogni campo di dati privati ​​perché puoi facilmente vedere qualsiasi convalida per ciascun campo.Inoltre sono più uno sviluppatore Java che uno sviluppatore PHP.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top