Ce n'est pas possible. array()
n'est pas un objet de n'importe quelle classe. Par conséquent, il ne peut pas implémenter une interface (voir here). Vous ne pouvez donc pas utiliser un objet et un tableau de manière interchangeable. La solution dépend fortement de ce que vous souhaitez réaliser.
Pourquoi changez-vous pas la signature de la fonction pour permettre seulement ArrayObject
s, ArrayIterator
s, ArrayAccess
s, IteratorAggregate
s, Iterator
s ou Traversable
s (en fonction de ce que vous voulez faire à l'intérieur de la fonction)?
Si vous devez vous fier aux capacités d'interaction de l'objet transmis, vous devez utiliser Traversable
comme indicateur de type. Cela garantira que l'objet peut être utilisé avec foreach()
. Si vous avez besoin d'un accès par clé de type tableau à l'objet (par exemple, $test['test']
), vous devez utiliser ArrayAccess
comme indicateur de type. Mais si vous avez besoin que l'objet transmis soit d'un type personnalisé spécifique, utilisez le type personnalisé comme indice de type. Une autre option serait de ne pas utiliser du tout d'indice de type et de déterminer le type de l'argument passé dans le corps de la fonction et traiter l'argument en conséquence (ou lancer un InvalidArgumentException
ou quelque chose comme ça).
if (is_array($arg)) { ... }
else if ($arg instanceof Traversable) { ... }
else if ($arg instanceof ArrayAccess) { ... }
else {
throw new InvalidArgumentException('...');
}
Pourquoi n'ArrayObject pas de travail pour cela? – Fortega
Je pense que vous devez soit changer l'indice de type OU simplement fournir des tableaux à la fonction. array est un type de données primitif et ne peut pas être hérité. – PatrikAkerstrand
Les tableaux ne sont pas des objets, dans la mesure où vous devez utiliser soit le tableau xor ArrayObject. – stefs