Fabrication d'un objet PHP se comporter comme un tableau?
J'aimerais être capable d'écrire une classe PHP qui se comporte comme un tableau et utilise tableau normal syntaxe pour arriver & paramètre.
Par exemple (où Foo est une classe PHP de ma décision):
$foo = new Foo();
$foo['fooKey'] = 'foo value';
echo $foo['fooKey'];
Je sais que PHP a la _get et _set méthodes magiques, mais ceux-ci ne vous permettront pas d'utiliser la notation de tableau pour accéder aux éléments. Python gère par la surcharge __getitem__ et __ _ _ setitem__.
Est-il un moyen de faire cela en PHP? Si cela fait une différence, je suis en cours d'exécution de PHP 5.2.
Vous devez vous connecter pour publier un commentaire.
Si vous étendez
ArrayObject
ou de mettre en œuvreArrayAccess
puis vous pouvez faire ce que vous voulez.Nope, casting seulement les résultats dans un tableau PHP -- la perte quelles que soient les fonctionnalités de votre ArrayObject classe dérivée de a eu. Check this out:
Comme prévu, le array_keys() échec de l'appel. En outre, is_array($bla) renvoie la valeur false. Mais si vous modifiez le constructeur de la ligne à:
puis vous obtenez juste un normal PHP array (is_array($bla) renvoie la valeur true, et array_keys($bla) travaille), mais toutes les fonctionnalités de la ArrayObject dérivé de la sous-classe est perdu (dans ce cas, la casse, les touches ne fonctionnent plus). Essayez d'exécuter le code ci-dessus dans les deux sens, et vous verrez ce que je veux dire.
PHP doit fournir soit un natif de tableau dans lequel les touches sont sensibles à la casse, ou de faire ArrayObject être moulage à la matrice sans perdre quelle que soit la fonctionnalité de la sous-classe met en œuvre, ou simplement les faire toutes les fonctions de tableau accepter ArrayObject instances.