faiwer
@faiwer
frontend-developer

Область применения ссылок?

Доброго времени суток. На просторах интернета умыдрился встрять в холивар по поводу ссылок в PHP. В ходе холивара прозвучали ~следующие аргументы:


1. Ссылки из PHP вот вот выпилят, в версии 5.0+ их оставили как deprecated (я не нашёл никаких подтверждений этому, кроме «выпиливания» someFunction( &link ) )

2. Использование function someFunction( &param ){} противоречит «концепции функции», т.к. единственный правильный способ применения функции — $some = someFunction( $some ). Любой иной код — «странный» и так писать не надо.

3. Вместо foreach( $array as &value ){} нужно использовать или $array = array_map( 'func', $array ) или foreach( $array as $key => &value ){ $array[ $key ] = }.

4. Дословно «пхп 5 задал верное поведение. Примитивы именно и нужно передавать как копии (то есть чтобы нельзя было повлиять на примитив, указанный в параметре)».


Мне столь радикальные взгляды на столь удобные и привычные механизмы показались не адекватными. Я полагаю, что каждому инструменту своё место. И что если использование ссылок позволяет упростить код, сделать его «читабельнее», а также повысить его быстродействие, там где это критично, то нет никаких причин от них отказываться.


Я не утверждаю, что все функции должны принимать аргументы по ссылкам, или что кода вида $array = some( $array ) плох, я утверждаю, что «всему своё место». Но у меня сложилось впечатление, что такая позиция уже не «модная», и использование ссылок даже в foreach() уже unmanner.


Вот небольшой склёпанный на коленке код, похволяющий сравнить производительность в шаровакуумных условиях. Суть вопроса: кто прав? Неужели «концепция применения функции» столь сильна, а ссылки столько сложны для понимания, что их применение неадекватно?
  • Вопрос задан
  • 2432 просмотра
Решения вопроса 1
Видал эту дискуссию.

1. ссылки не выпилят, к гадалке не ходи (кроме того, что Вы сказали). Тем более что очень много встроенных функций принимают в качестве аргументов ссылки.

2. Такой подход позволяет сэкономить памяти и времени. Взять хотя бы функции ряда sort, ksrot… Постоянно копировать большой массив полностью было бы очень накладно, тем более, что массивы в PHP очень много места занимают.

Так же полезно бывает использовать ссылки, если необходимо, чтобы метод вернул несколько значений. Например, preg_match, возвращает true/false и можно ещё получить массив совпадений. Некоторые, придумывают свои извращения. Представим, что preg_match можно переписать, то можно было бы получить вот такую конструкцию: list($is_match, $matches) = preg_match(**), что существенно усложнит понимание интерфейса функции.

3. Дело вкуса. Но мне кажется, что использование здесь ссылки даст небольшой прирост скорости.

4. Ну… все мы используем ссылки, так как пользуемся нативными функциями PHP. И в своём коде я использую ссылки (как выяснилось в трёх местах: два метода, один foreach) и пока ни одно животное во время использования кода не пострадало.

Что касается моды, то да, в программировании есть своя мода. Те же синглтоны были некогда популярны, а сейчас они в опале. Но в случае с синглтоном есть объективные причины. А тут я объективных причин не вижу, чтобы не использовать ссылки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы