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

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #1 korshunov » 02.06.2021, 07:47

Весьма любопытно содержимое файла
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.

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

zyxer M
zyxer M
Возраст: 32
Репутация: 77
Сообщения: 419
Зарегистрирован: 03.02.2016
С нами: 8 лет 1 месяц
Откуда: Днепр

Сообщение #2 zyxer » 04.06.2021, 09:36

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


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

Оставлю на подумать. Или если интересно, можете внести лепту )
Всё сказанное мной, является лично моим мнением, и не является официальной позицией OkayCMS


Название раздела: Вопросы по работе с OkayCMS
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Вопросы по работе с OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 45 гостей