Я не люблю бить мертвую лошадь, но все же я буду весить здесь.
Я бы не считал это анти-паттерном;как указывает @Merijn, многие нативные функции PHP принимают параметры смешанного типа.Кроме того, многие ваши собственные обстоятельства требуют, чтобы для краткости функция принимала элемент или коллекцию заданного типа вместо разделения его на две функции.
Приведение к (array)
- это быстро и легкоспособ достижения этой функциональности:
function printStuff($stuff)
{
foreach((array) $stuff as $key => $value) {
echo sprintf('%d : %s', $key, $value) . PHP_EOL;
}
}
printStuff("foo");
// 0 : foo
printStuff(array("foo", "bar", "qux"));
// 0 : foo
// 1 : bar
// 2 : qux
Использование $foo = (array) $foo;
лучше 1 , чем $foo = array($foo);
, поскольку, когда $foo
уже является массивом, он не будет переноситься снова.
Ссылка
1 Дает желаемые результаты со скалярами;объекты дают разные результаты.Объекты, приведенные к массиву, будут перечислять свойства, поэтому используйте усмотрение.