PHP SPL: ses interfaces impliquant des tableaux couvrent-elles toutes les propriétés d'un tableau?

StackOverflow https://stackoverflow.com/questions/145376

  •  02-07-2019
  •  | 
  •  

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.

Était-ce utile?

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 .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top