2010-10-01 11 views
0

J'ai une classe qui utilise la méthode magique __set. Une des propriétés de la classe ne peut être définie qu'avec une certaine plage de valeurs de chaîne, le meilleur exemple auquel je peux penser est le type de données mysql ENUM ('value_one', 'value_two', 'value_three'). Est-ce que je placerai des instructions conditionnelles dans la méthode __set pour distinguer entre quelle propriété est définie et si la valeur est valide pour cette propriété?meilleure pratique php pour valider setter lors de la surcharge des propriétés de classe

Les instructions de commutation de grande taille dans une méthode __set considérée comme une pratique bâclée, sont-elles un meilleur moyen de produire les résultats souhaités?

Merci, Ben

Répondre

0

Est-ce que je place des instructions conditionnelles dans la méthode de __set distinguer entre lesquels la propriété est définie et si la valeur est valable pour cette propriété?

Oui à la première partie, non à la seconde.

sont grandes déclarations de commutation à l'intérieur d'une méthode __set considérée comme une pratique bâclée, est leur une meilleure façon de produire les résultats escomptés?

Votre méthode __set devrait déterminer quelle variable essaie de régler et ensuite passer le reste hors de la fonctionnalité à un setter privé setParticularVar. setParticularVar contiendra alors la logique spécifique à la validation de cette variable et peut déclencher une exception si une valeur invalide est passée. Alternativement, vous pouvez rendre public le setter privé à la place, en permettant deux façons de définir la variable, mais ce n'est pas aussi souhaitable que deux façons de définir une valeur n'est pas aussi propre qu'un design.

0

La fonction __set pourrait vérifier pour l'existence d'une méthode nommée similaire à presetVariableName, qui est appelé et a adopté la nouvelle valeur en tant que paramètre. Cette fonction peut ensuite exécuter la logique de validation et renvoyer true ou false pour savoir si elle est valide ou non.

+0

Ou vous pouvez nommer la méthode 'setVariableName' et l'utiliser comme setter. La méthode magique ne serait donc utilisée que comme un "raccourci". De plus, cela ne vous permet d'implémenter que le setter spécifique pour les variables qui ont besoin de validation (en sauvegardant le code que vous avez besoin d'écrire) ... – ircmaxell

+0

Personnellement, je ne suis pas fan de deux façons de définir une propriété, > color = 'blue'' et '$ obj-> setColor (' blue ')'. Je préfère l'interface pour avoir un sens ou l'autre. Cependant, c'est juste moi et beaucoup de gens le font dans les deux sens. – webbiedave

+0

Merci pour tous vos commentaires m'a donné une bien meilleure compréhension de la meilleure façon d'effectuer la logique requise! – Globalz