Оптимизированный подход заключается в кэшировании длины массива и использовании одиночного шаблона var, инициализирующего все переменные с одним ключевым словом var.
var i, max, myStringArray = ["Hello","World"];
for (i = 0, max = myStringArray.length; i < max; i++) {
alert(myStringArray[i]);
//Do something
}
Если порядок итерации не имеет значения, вы должны попробовать обратный цикл, он быстрее, так как он уменьшает тестирование служебных данных и декремент в одном утверждении:
var i,myStringArray = ["item1","item2"];
for (i = myStringArray.length; i--) {
alert(myStringArray[i]);
}
или лучше и более чистый для использования во время цикла:
var myStringArray = ["item1","item2"],i = myStringArray.length;
while(i--) {
// do something with fruits[i]
}
Это не включено.
Если он не включен, есть ли у вас какие-либо подсказки, почему он не был включен, когда был добавлен тип hinting?
blockquote>С текущей реализации массива, потребовалось бы проверить все элементы массива во время выполнения, потому что сам массив не содержит информации о типе.
Это уже было предложено для PHP 5.6, но отклонено: RFC «arrayof» - интересно не из-за проблем с производительностью, которые оказались ничтожными, а потому, что не было соглашения как именно это должно быть реализовано. Было также возражение, что оно является неполным без подсказок скалярного типа. Если вы заинтересованы во всем обсуждении, прочитайте его в архиве списка рассылки .
Подсказки типа массива IMHO обеспечили бы большую выгоду вместе с типизированными массивами, и мне бы хотелось, чтобы см. их реализовано.
Итак, возможно, пришло время для нового RFC и возобновить это обсуждение.
Частичное обходное решение:
вы можете ввести подсказку переменные аргументы и, таким образом, записать подпись как
function findUserByAge(int $age, User ...$users) : array
Использование:
findUserByAge(15, ...$userInput);
В этом вызове аргумент
$userInput
будет «распакован» в отдельные переменные, а в сам метод «упакован» обратно в массив$users
. Каждый элемент проверяется на типUser
.$userInput
также может быть итератором, он будет преобразован в массив.К сожалению, подобного типа для возвращаемых типов не существует, и вы можете использовать его только для последнего аргумента.
Поскольку массивы могут содержать смешанные значения, это невозможно.
Для этой цели вам необходимо использовать объекты / класс.
Вы можете создать класс, который будет управлять собственным массивом списка (частный / защищенный атрибут) и запретить добавлять другие значения в качестве рабочий стол для этой проблемы, если это действительно необходимо.
Однако ни один ответственный программист никогда не сломает намеченный шаблон, особенно если вы его прокомментируете правильно.
Экзапланирование:
Например, вы можете создать любой массив:
$myArray = array();
и добавить number:
$myArray[] = 1;
a строка:
$myArray[] = "abc123";
и объект
$myArray[] = new MyClass("some parameter", "and one more");
Также не забывайте, что вы можете иметь простой массив, многомерный штабелированный массив, а также ассоциативные массивы, которые также могут иметь смешанные шаблоны.
Его довольно трудно, пока невозможно найти парсер / нотацию, чтобы все версии работали с выражением, которое заставляет формат для массив, я думаю.
Было бы здорово с одной стороны, но с другой стороны медали вы потеряете некоторую способность смешать данные в массиве, которые могут иметь решающее значение для большого количества существующего кода и гибкости PHP может предложить.
Из-за смешанного контента, функции которого мы не хотим пропустить в PHP 7, невозможно набрать точное совпадение массива, как вы можете что-то вставить.
Добавляем к тому, на что ответил Штеини.
Вы можете создать класс ObjectNIterator, который управляет вашим ObjectN и реализует Iterator: http://php.net/manual/en/class.iterator.php
Из методаN вызовите классMethodM, который возвращает заполненный ObjectNIterator, затем передайте эти данные методуO, который ожидает ObjectNIterator:
public function methodO(ObjectNIterator $objectNCollection)