Comment puis-je utiliser __get () de PHP et __set () pour les champs définis dans ma classe?

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

Question

J'ai eu une bonne lecture des spécifications PHP sur la surcharge , et la plupart des exemples semblent être destinés à permettre simplement de définir des champs personnalisés (semblables à stdClass).

Mais les champs privés définis dans ma classe? Comment doivent-ils être récupérés / affectés? Je pouvais faire un interrupteur sur les valeurs possibles et agir sur certaines valeurs:

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;
        }
    }
}

Est-ce la meilleure méthode, ou est-il une meilleure pratique généralement acceptée? (Je ne sais pas s'il est possible de variables de classe en boucle dans une classe, mais peu importe qui est indiqué dans la plupart des situations, puisque vous ne voulez pas retourner tout.)

Était-ce utile?

La solution

Cela aurait pour effet de les rendre publics, et en général cela, vous ne gagne rien sur tout simplement en utilisant les propriétés publiques (mais vous payer la pénalité de performance et doivent écrire plus de code, les bugs de risque).

Utilisez que seulement si vous avez le code existant qui utilise les biens publics et tout à coup vous avez besoin getter / setter pour elle (comme votre exemple avec age).

Si vous devez exécuter du code lorsque la propriété est lu / écrit (par exemple faire en lecture seule ou paresseusement extraites de la base), alors vous devriez utiliser getters normal / setters (getAge() / setAge()).

Autres conseils

Je utiliser largement __get() et __set() et j'ai mes propriétés déclarées public. Je voulais le meilleur des deux mondes, donc mon IDE pourrait la liste des propriétés publiques pour moi quand je tape le nom d'une instance de classe. Comment ai-je les méthodes d'intercepteurs de PHP pour travailler, même si les propriétés sont publiques et visibles en dehors de la classe?

unset () les propriétés I veulent __get() et __set() à utiliser dans la __construct() classe

Comprendre cette méthode en a une soirée couple de frustration: -.)

Je ne vois pas beaucoup de gens à les utiliser, mais voici ce que je pense.

Pour récupérer des variables privées, vous voulez probablement donner une liste de variables définies qui peuvent être accessibles par l'extérieur. Ensuite, vérifiez si la variable est dans ce tableau. Le cas échéant, permettre d'être changé / obtenu. Dans le cas contraire, que ce soit une erreur ou return null.

Honnêtement, les mises en œuvre pour ce sont vraiment au cas par cas. Si vous aviez une classe d'utilisateurs que vous avez enregistré toutes les informations dans un seul tableau, vous pourriez avoir $ user-> nom soit tiré de $ user-> compte [ « nom »], ou quelque chose comme ça.

En outre, dans un cas plus par cas, vous pouvez faire quelques modifications avant de leur donner des valeurs, comme hachant un mot de passe.

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