Come faccio a utilizzare PHP per l' __get() e __set() per i campi definiti nella mia classe?

StackOverflow https://stackoverflow.com/questions/1180935

Domanda

Ho avuto una buona lettura del PHP specifiche sul sovraccarico, e la maggior parte degli esempi che sembrano essere destinati a consentire la definizione di campi personalizzati (simile a stdClass).

Ma per quanto riguarda il privato, campi definiti nella mia classe?Come dovrebbero essere recuperati/ricevuto?Ho potuto fare un interruttore sui possibili valori e agire su determinati valori:

class A
{
    private $name;
    private $age;

    public function __get( $var )
    {
        switch ( $var )
        {
            case 'name':
                return $this->name;
                break;
            case 'age':
                return $this->age+10; // just to do something different ;)
                break;
            default:
                break;
        }
    }
}

È questo il metodo migliore, o c'è dell'altro generalmente accettato le migliori pratiche?(Non so se è possibile loop variabili di classe all'interno di una classe, ma a prescindere che non è appropriato a maggior parte delle situazioni, dal momento che non si vuole tornare tutto.)

È stato utile?

Soluzione

Questo sarebbe effettivamente rendere pubblici, e di solito questo si guadagna nulla oltre il semplice utilizzo dei mezzi di proprietà (ma si paga le prestazioni e scrivere più codice, il rischio di bug).

Utilizzare solo se si dispone di codice esistente che utilizza la proprietà pubblica e che improvvisamente bisogno di metodi getter/setter (come il tuo esempio con age).

Se è necessario eseguire del codice quando la proprietà è di lettura/scrittura (ad es.rendere di sola lettura o pigramente recuperare dal database), allora si dovrebbe utilizzare un normale getter/setter (getAge()/setAge()).

Altri suggerimenti

Mi fanno un ampio uso di __get() e __set() E io ho la mia proprietà dichiarate public.Ho voluto il meglio di entrambi i mondi, quindi il mio IDE potrebbe fare un elenco di proprietà pubbliche, per me, quando si digita il nome di un'istanza di classe.Come ho fatto a diventare il PHP interceptor metodi di lavoro, anche se la proprietà è pubblica e visibile al di fuori della classe?

unset() la proprietà Voglio __get() e __set() per essere utilizzato nella classe __construct().

Capire questo metodo ha preso un paio di serate di frustrazione :-)

Non vedo molte persone che li usano, ma questo è quello che penso.

Per il recupero di variabili private, probabilmente si vuole dare un elenco di variabili definite che sono in grado di essere accessibile dall'esterno.Quindi, controllare per vedere se la variabile richiesta è nell'array.Se lo è, permettono di essere cambiato/ottenuto.Se non, di errore o di restituire null.

Onestamente, implementazioni di questo sono davvero caso per caso.Se si ha una classe utente memorizzate tutte le informazioni in un unico array, si potrebbe avere $user->name essere tirato da $utente->account['nome'], o qualcosa di simile.

Inoltre, in più, caso per caso, si potrebbe fare qualche modifica prima di dare loro i valori hash di una password.

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