2010-12-03 4 views
3

J'ai la classe suivante, par exemple.PHP Initialiser les variables de classe sans constructeur

class A{ 
public var1; 
public var2; 
} 

maintenant, je veux créer un objet de cette classe, et je ne les suivantes:

$a = new A(); 
$a->var1 = 123; 
$a->var2 = 987; 

Y at-il une plus meilleure façon de le faire, car parfois il peut y avoir encore 20 de telles variables à l'intérieur de la classe. Je cherche juste à compacter le code, et un constructeur n'est pas utilisé pour cette classe. Les valeurs des variables ne sont pas statiques (qui est la raison pour laquelle aucun mot-clé statique est utilisé)

Je suis à la recherche de plus pour ce genre de mission que nous faisons pour les tableaux:

$arr = array(
'var1' => 123, 
'var2' => 987 
); 

De plus, comment vais-je vais éviter autour NullPointerException (qui apparaît parfois lorsque j'essaie d'envoyer cet objet à un service web .Net) - Ceci est facultatif, car je peux d'abord relier ceci à des variables nulles dans la classe, mais je ne sais pas exactement comment surmonter cette erreur.

Répondre

1

Bien le constructeur pourrait accepter un tableau de paramètres contenant les valeurs pour ces variables de classe que vous définissez aux variables de classe à l'intérieur du constructeur. Pour éviter une valeur nulle, attribuez simplement à chaque variable de classe que vous déclarez une valeur de base, telle qu'une chaîne vide, toute valeur dont vous n'avez pas besoin.

+0

hmm ... mais je ne peux pas ajouter de constructeur aux classes. J'ai environ 100 classes de ce type avec la plupart des classes ayant environ 5+ variables. Merci pour la question de la valeur nulle - je pensais dans le même sens. – Stoic

+1

Étendre les classes, puis remplacer leur constructeur? Est-ce possible? Ou ajoutez une méthode setParams de sorte que vous puissiez les transmettre en masse après la création. – Chestone

0

Existe-t-il un meilleur moyen d'affecter des valeurs aux propriétés d'une classe? Eh bien, il y a plusieurs façons, mais l'une n'est pas nécessairement meilleure que l'autre, et elles impliqueront toutes une quantité de code similaire à accomplir.

Impossible de répondre à votre question .NET; Je ne suis pas familier avec ça.

+0

J'ai fourni un exemple de ce que je cherche. Des indices, s'il vous plait? – Stoic

+1

Oui, vous pouvez faire ce que je pense que vous voulez .. voir http://jsbin.com/anapo3/edit – simshaun

+0

hmm pas exactement ce que je cherche, mais oui .. cela m'a conduit à créer une fonction qui aidera moi à travers ce ... http://jsbin.com/anapo3/2/edit – Stoic

Questions connexes