This isn't possible. array()
is not an object of any class. Hence, it can't implement any
interface (see here). So you can't use an object and an array interchangeably. The solution strongly depends on what you'd like to achieve.
Neden izin işlevi imza değiştirmek gerekmez, sadece ArrayObject
s ArrayIterator
s ArrayAccess
s IteratorAggregate
s {[ (4)]} s veya Traversable
s (Eğer işlev içinde yapmak istiyorum ne bağlı olarak)?
Eğer ipucu olarak Traversable
kullanmalısınız geçirilen nesne interation-yeteneklerine güvenmek zorunda. Bu nesne foreach()
ile kullanılabilir sağlayacaktır. Eğer nesneye dizi gibi anahtar erişim gerekiyorsa (örneğin, $test['test']
) size ipucu olarak ArrayAccess
kullanmalısınız. Eğer belirli bir özel tipte olmaları geçirilen nesne gerekiyorsa, ipucu olarak özel türünü kullanın.
Başka bir seçenek hiç bir tip-ipucu kullanımı ve işlevi bünyesinde geçirilen argümanın türünü belirlemek ve buna argüman işlemek (veya InvalidArgumentException
veya böyle bir şey atmak) değil olacaktır.
if (is_array($arg)) { ... }
else if ($arg instanceof Traversable) { ... }
else if ($arg instanceof ArrayAccess) { ... }
else {
throw new InvalidArgumentException('...');
}