J'aime la mise en œuvre du hasch de Ruby où vous pouvez initialiser l'objet Hash avec une valeur par défaut. Pour le moment, j'ai du mal à mettre en œuvre un objet similaire dans PHP. Ceci est mon premier tir (non fonctionnel) à cela.
$myarr['value']->myVal=5;
4 Réponses :
class DefaultArray extends ArrayObject { public function __construct($value = null){ if(is_null($value)) { $this->value = 'default'; } else { $this->value = $value; } } }
Merci, vous avez repéré mon erreur! C'est $ da-> setingdefault (1) au lieu de $ da-> setingdefault = 1! Oh l'embarcalement! Avec cette modification, mon exemple fonctionne comme prévu. J'ai également pensé à passer la valeur par défaut dans le constructeur, mais je voulais préserver les arguments du constructeur d'origine de ArrayObject.
Vous pouvez utiliser ma bibliothèque minuscule valoresolver pour le rendre plus compact.
Pourquoi donc compliqué? MAINTENANT Il vous suffit d'appeler: P> initVal('bla');
$myarr['bla']->bla = 'bla';
L'utilisation de la classe ArrayObject conserve toutes les variables et les méthodes de support au même endroit. Lorsque l'utilisation de la fonction global i> a une probabilité beaucoup plus élevée de conduire à des problèmes de maintenance à l'avenir.
Essayez le Méthodes magiques __ Obtenir code> .
$da = new DefaultArray(); assert($da['foo'] == null); $da->setDefault(1); assert($da['bar'] == 1);
Vous pouvez utiliser ma bibliothèque minuscule valoresolver dans ce cas, par exemple: Et n'oubliez pas d'utiliser les espaces de noms Il existe également la possibilité de taper, par exemple si la valeur de votre variable devrait Soyez cochez le docs pour plus d'exemples p> p> Utiliser LAPALABS \ valoresolver \ résolveur \ valoresolver; code> p>
INTEGER code>, utilisez-le donc: p>
Lors de l'accès à une clé qui n'existe pas,
offsetTiet code> définira cette touche avec la valeur par défaut (voir
offsetsett code>). Cela signifie la prochaine fois qu'il existera. Si vous ne voulez pas que ce comportement et que vous obtenez toujours la valeur par défaut actuelle pour les touches non existantes, supprimez l'appel code> offsetsett code>.
Merci, Gumbo pour la clarification importante, ce comportement m'a déconcerté lors de mon premier test, mais est le comportement prévu. La question des questions répondit maintenant et je laisserai le code de test défectueux tel qu'il est.