Les Valeurs par défaut pour les Variables de Classe
Disons que j'ai une classe qui ressemble à ceci:
class UserModel {
private $_userData;
function __construct($user_data){
$this->_userData = $user_data;
}
}
Qui est appelé comme ceci:
$user = json_decode('{"name":"Neal","surname":"MyLastName"}');
$the_user = new UserModel($user);
Je ne veux pas, de sorte que chaque fois que je veux obtenir le nom de l'utilisateur d'avoir à faire $this->_userData->name
à l'intérieur de la classe.
Est-ce ok si je mets une valeur par défaut pour le nom et le prénom, et chreate un __get()
fonction de la façon:
class UserModel {
private $_userData;
private $name = 'default';
private $surname = 'default';
function __construct($user_data){
$this->_userData = $user_data;
}
function __get($var){
if(isset($this->_userData->$var))return $this->_userData->$var; //new storage
if(isset($this->$var))return $this->$var; //old storage
return null; //the default (could be a throw new Exception() instead)
}
}
Voici une démo de ce que je suis en train de faire: http://codepad.viper-7.com/cuS9Lx
Je ne suis pas sûr de voir ce que la question est vraiment? Il n'y a rien de mal à ce que ce que vous faites, et si cela convient à vos besoins le faire. Vous l'esprit, vous pourriez vouloir utiliser
Remarque: Quand il s'agit de la performance, il serait intéressant de savoir combien de temps il faut pour faire les différents isset()'s ci-dessus.
protected
pas private
variables.Remarque: Quand il s'agit de la performance, il serait intéressant de savoir combien de temps il faut pour faire les différents isset()'s ci-dessus.
OriginalL'auteur Neal | 2011-06-24
Vous devez vous connecter pour publier un commentaire.
Je ne sais pas si c'est exactement la façon dont vous voulez le faire. Personnellement, si j'avais par défaut, je mettrais tout sur le niveau de la classe, et puis les récupérer de cette façon:
Il a un faible encombrement, et il a plus de "Résoudre par défaut".
D'autre part, la mise en statique est un peu contre-intuitif visuellement.
Eh bien, dans ce cas, j'aurais probablement un "utilisateur par défaut", qui était une société privée, propriété statique de la classe utilisateur. Je serais probablement faire un tableau simple, de sorte que la recherche pourrait être
self::$defaul_user[$var]
OriginalL'auteur cwallenpoole
(1) Prolongée ennuyeux réponse:
Json standard de fonctions pour PHP générer des objets "à la volée" avec leur propre "classes internes", donc:
Va générer en interne, quelque chose comme ceci:
PAS votre "UserModel" de la classe.
(2) réponse Rapide:
Il y a quelques bibliothèques PHP, qui vous permettent de serialize et unserialize à l'aide de vos classes, vous pouvez naviguer sur le web un peu. Désolé, je n'ai pas les liens à droite maintenant.
(3) Vous pouvez également faire votre propre JSON méthodes, mais son plus compliqué:
Acclamations.
var_dump(json_decode('{"name":"Chris"}'));
serait d'imprimerobject(stdClass)#1 (1) { ["name"]=> string(5) "Chris" }
, donc il n'y a pas de classe personnalisée; c'est la valeur par défaut de la classe PHP (stdClass). Le point de l'ensemble de cette question est de conversion ou wrap ces propriétés dans unUserModel
classe (en définissant les propriétés directement, par exemple).Non, je dis que vous n'avez pas connu O. O. P. Im vous dire que ceux JSON+fonctions PHP ne pas utiliser vos propres classes, ils génèrent leurs propres classes, à l'aide d'un exemple.
Sciberras, Ok, son (stdClass)#1, mais sa reste pas "UserModel". Je suggère de Neal à regarder pour les fonctions existantes / bibliothèques (je l'ai vu, buit n'avez pas le lien) ou faire leur propre. Nous disons les mêmes concepts de base avec des mots différents 😉
OriginalL'auteur umlcat