Страница 1 из 1

ChainExtender.php - странные приемы

Добавлено: 02.06.2021, 07:47
korshunov
Весьма любопытно содержимое файла
Okay/Core/Modules/Extender/ChainExtender.php

1. В нем есть функция

private static function isFirstExtension($index, $extensions)
{
$extensionsIndexes = array_keys($extensions);
return $index === reset($extensionsIndexes);
}

Смысл ее, видимо, в том, что определяет, является ли данное значение первым индексом массива.
Вызывается один раз в ситуации

$countExtensions = count($extensions);
for($i = 0; $i < $countExtensions; $i++) {
...
if (static::isFirstExtension($i, $extensions)) {
...
}
}

Очень уж сложно накручено. По-моему, при наличии счетчика $i проверка могла бы быть существенно проще, именно $i==0.

Можно увидеть в этом некоторый смысл, если массив $extensions индексируется не по порядку числами 0,1,2,..., а произвольными значениями. Но, во-первых, в системе, насколько я вижу, реально произвольных индексов нет. Во-вторых, если б они были, то результат такой работы был бы неверный (например, при индексах 1,0 результат работы первого экстендера просто затерся бы).

Вообще код
$countExtensions = count($extensions);
for($i = 0; $i < $countExtensions; $i++) {
выглядит в этой ситуации как работа начинающего, пришедшего из другого языка, где нет foreach.

Или, может, я что-то упустил, и в этом есть глубокий смысл?

Добавлено: 04.06.2021, 09:36
zyxer
В принципе да, можно пересмотреть этот код и переписать его. Можно даже подумать сделать первый вызов вне цикла, затем если count()>1 сделать array_shift() и его в foreach.


Относительно
korshunov писал(а):выглядит в этой ситуации как работа начинающего, пришедшего из другого языка, где нет foreach.
выглядеть может как угодно, но уверяю вас, это не так :) (писал не я этот кусок).

Оставлю на подумать. Или если интересно, можете внести лепту )