PHP SPL: ses interfaces impliquant des tableaux couvrent-elles toutes les propriétés d'un tableau?
Question
Serait-il possible d’écrire une classe virtuellement indiscernable d’un tableau PHP réel en implémentant toutes les interfaces SPL nécessaires? Est-ce qu'ils manquent quelque chose qui serait critique?
J'aimerais construire un objet Array plus avancé, mais je veux m'assurer que je ne casserais pas une application existante qui utilise des tableaux partout si je les remplaçais par une classe Array personnalisée.
La solution
Les seuls problèmes auxquels je peux penser sont les fonctions gettype () et is_array (). Vérifiez votre code pour
gettype($FakeArray) == 'array'
is_array($FakeArray)
Parce que bien que vous puissiez utiliser l'objet comme un tableau, il sera toujours identifié comme un objet.
Autres conseils
Outre les remarques ci-dessus, vous ne pourrez pas faire en sorte que les indicateurs de type de tableau de l'espace utilisateur fonctionnent avec des instances de votre classe. Par exemple:
<?php
function f(array $a) { /*...*/ }
$ao = new ArrayObject();
f($ao); //error
?>
Sortie:
Catchable fatal error: Argument 1 passed to f() must be an array, object given
Les autres différences incluent l'opérateur '+' pour les tableaux (fusion) et l'échec de la totalité des fonctions array _ *
, y compris les array_merge
et le array_shift couramment utilisés
.