Pull to refresh

Comments 26

Спасибо тебе добрый человек. По тестам всегда знал, что в PHP foreach for while самые быстрые и использовал их — но вот залезть под капот всё не было ни времени ни желания, а ты это сделал для нас всех, таких ленивых.

А что насчет лямбды объявленной со словом static


array_walk($arr, static function($value, $key){ echo $key.$value;});

По идее должно быть быстрее если вызовы горячие

Добавил замер для статической функции. Разницы не заметно.

Шторм советует добавить статик с пометкой "микрооптимизация". Я добавляю :)

Ну да, как тут не нажать ALT+ENTER, если подсвечено!?
Вообще забавно, как среда разработки сама формирует нужный ей стиль кода. Добавят завтра джетбрейновцы A/B эксперимет, который будет советовать, в качестве оптимизации, заменить while на if/goto и ведь многие поведутся и будут потом уверены, что это влияет на производительность.

PS Я тоже добавляю :D

Ну так на то она и "микро", что влияние незначительное

Эта микрооптимизация работает в случае, когда вы находитесь в контексте класса.
Т.е. просто анонимная функция биндит контекст по-умолчанию, а статическая — не биндит контекст и не пробрасывает внутрь анониманой функции $this. Вот в чем микрооптимизация

Шторм подсвечивает только в контесте класса :)

Перевод на английский был бы очень кстати для ссылок при дискуссиях в англоязычной среде. Если кто-то возьмется, был бы очень благодарен. :-)
Самому, что ли, взяться… Хотя я такого наперевожу…
Немного оффтоп: неужели может быть такое, что у кого-то не было английского в школе? Или есть еще какая-то причина? Ибо на таком уровне даже моя девушка сможет перевести, если вы понимаете о чем я :/
Нет не понимаю. Я работаю в англофонной среде последние 8 лет. По работе общаюсь 100% по-английски. Но взяться за перевод этой статьи не считаю возможным. Если ваша девушка обладает необходимой квалификацией, то пусть попробует. Но я подозреваю что заминусуют ее тут именно за качество перевода слету.
Хотя возможно это я такой туповатый, а вокруг все люди поспособнее и поскромнее ходят и живут.
Просто мне показалось что это типичный технический английский «на уровне чтения документации», который ожидает 99% рекрутеров… А может и показалось…

Это совершенно другой процесс переводить текст на английский и читать английский текчт

Просто я всегда считал что любое русское явление в программировании — это калька с английского, и любой разраб должен знать как оно произносится по-английски, банально чтобы загуглить его в буржунете, ибо в русском материала до сих пор катастрофически мало.
Не продолжайте. Просто переведите. Мы все будем рады и благодарны.
А, ладно, подумаю над этим на досуге…

Термины — может быть. Но грамматику, да и простые слова, не говоря об идиомах. Вот первая же предложение "Дело было вечером, делать было нечего" — можно перевести дословно, конечно, но наверняка что-то лучше есть.

Я тоже об этом думал, когда просматривал ее уже как носитель языка, а не как разраб, не буду скрывать :) Однако если предназначение статьи — скидывать ее в англоязычных дискуссиях, то на мой взгляд использование в ней идиом (особенно русскоязычных, которые в большинстве случаев в английском имеют совершенно другой смысл) несколько бессмысленно, это все-таки не дискуссии филологов…

Да, кстати, у меня в школе был французский :)

Вроде как ещё можно array_map потрогать. Вроде там что то крутили

Особенно если надо вызвать какую-то функцию на каждом элементе массива типа array_map('gettype', $arr), мне кажется будет быстрее чем foreach
По принципу работы array_map ничем не отличается от array_walk. Нет, быстрее не будет.

Принцип то один, гляньте внутри, я сам в коде использую map вместо foreach, а вот подробностей не помню, почему так

Так я внутри и смотрю. Тут не в способе перебора дело, а в вызове пользовательской функции, при которой управление передается виртуальной машине.
И там и там zend_call_function(&fci, &fci_cache) дергается.

Sign up to leave a comment.