Crazy PHP world

Posted by Dmytro Shteflyuk on under PHP

We are living in XXI century, but PHPists can’t decide yet how to write: "text $b" or 'text ' . $b. I’m going slightly mad.

via Artjom Kurapov‘s blog.

52 Responses to this entry

Subscribe to comments with RSS

DM
said on September 14th, 2007 at 02:09 · Permalink

With computing power that we have today it doesn’t matter.

Btw, RubyOnRails has the power =)

said on September 14th, 2007 at 02:23 · Permalink

Это относится не только к PHPистам. Вот пример на C#:

1
"text " + b

vs

1
string.Format("text {0}", b)
said on September 14th, 2007 at 09:13 · Permalink

И что, ASP.NET-разработчики высчитывают, сколько миллисекунд займет каждая из приведенных строк? В ASP.NET все просто — StringBuilder если генерить строку из кучи кусочков, String.Format если нужно сгенерить строку для пользователей (потому что обычно “text {0}” хранится в ресурсах), и String.Concat (т.е. +) — если чего-нить внутрисистемное сгенерить (например, ID какой-нибудь).

Если честно, то я вообще не считаю, что выбор метода склейки строк в обычном приложении для пользователей (Web- или WinForms) так уж сильно влияет на перфоманс, что это вообще может кто-то заметить. Обычно либо неудачно реализованная работа с базой, либо использованы дубовые алгоритмы.

said on September 14th, 2007 at 09:15 · Permalink

Ну что я могу сказать. В ряде случаев удобней писать в двойных кавычках, как в твоем примере.
А вот в одинарных удобней, если скажем HTML код пишешь, пример:

1
$html = '<a href="/" class="link" id="link" name="link">'.$arr['row'][0].'</a>'

Так что в разных случаях, разное удобней.

А от куда, кстати, такие мысли, мол решить не могут, с ума сходят и т.д.? Уже около 2х лет пишу на PHP не когда подобные мысли не лезли в голову. Чем больше методов реализовать задачу, тем лучше!!!

said on September 14th, 2007 at 09:25 · Permalink

на эти вопросы есть (ИМХО) однозначные и ПРАВИЛЬНЫЕ ответы:

1. 'писать надо так'.$a
2. в сад "

said on September 14th, 2007 at 09:26 · Permalink

There is new holly war about “savings on matches” ?

said on September 14th, 2007 at 09:34 · Permalink

2BlackByte
Удобнее HTML выносить из PHP.

Разделяй логику и представление… брат!
Пис вам чуваки

said on September 14th, 2007 at 09:43 · Permalink

2LeKz
ну если уж разделять, тогда по хорошему вообщем нужно вот так писать

1
2
3
4
<?
 $a='Hello World';
?>
<a href="/"><?=$a?></a>

Не о шаблонах сейчас речь, а писать или не писать кавычки… я говорю, что хорошо что есть и такие и такие. В разных задачах удобней и те и те! Быть обоим!

said on September 14th, 2007 at 11:23 · Permalink

Обычно производительность упирается в работу с БД… и еще я думаю не намногих сайтах используется кэширование данных и HTML :(

said on September 14th, 2007 at 12:00 · Permalink

Вот и я о чем говорю. Глупо оптимизировать приложение, заменяя " на ' по всему приложению. Тем более, что

1
"Hello, $name. You are $age years old."

читается намного лучше, чем

1
'Hello, '.$name.'. You are '.$age.' years old.'

(это просто ИМХО, и если у вас в команде считается, что с ' код становится понятнее,– используйте именно такой вид кавычек).

Товарищи, лучше оптимизируйте базу, настройте кэширование и выложите в SVN код, легкий для чтения и сопровождения, чем протирайте штаны в поисках лучшей по перфомансу генерации строк.

И вообще идея заметки была не в этом. Это был просто крик души. Мы живем в век информационных технологий, глобализации и построения огромных и богатых внутренней логикой приложений. А вы до сих пор строки выбираете как клеить. Ну не смешно, а?

Я бы не делал этого поста (тем более про PHP не собирался уже писать в блоге), но блин чуть ли не каждую неделю кто-нибудь напишет, что ' быстрее. Детский сад!

said on September 14th, 2007 at 12:12 · Permalink

Критик. Где логика? Зачем говоря о машинах вспоминать о памперсах?

Был затронут вопрос кавычек и конкатенации, а значит вполне уместно говорить об оптимизации именно этих операций.

Относительно оптимизации бд, кэше – ты прав, но это другая песочница или другая история.

said on September 14th, 2007 at 12:23 · Permalink

Оптимизация производительности отдельных частей приложения направлена на оптимизацию скорости выполнения всего приложения в целом. Т.е. исходная задача у нас — сделать приложение быстрее (и точно никто не ставит задачу оптимизировать склейку строк). Для достижения поставленной задачи есть два пути:

  1. Мелочный — заменить " на ', foreach на for.
  2. Оптимальный — настроить кэширование, оптимизировать работу с базой, заменить пузырьковую сортировку на quick sort.

Зачем тратить время на первый способ, если вы не получите существенного прироста? Строки в бизнеслогике клеятся по минимуму, основная масса таких операций — в шаблонизаторе. Которые уже тысячу лет назад написаны. Потому я и утверждаю, что это идиотизм — сидеть и вычислять, какую долю секунды займет склейка строк ', а какую — подстановка переменных в ".

said on September 14th, 2007 at 12:41 · Permalink

Кпум. Ты мне вмазал, но пропускай повторный.

Я пропускаю твой и соглашаюсь со всем сказанным тобой, но зачем вновь о памперсах? :)

Или давай так. Пускай будет идеальный случай. Мы оптимизировали все, что только можно (разве такое бывает?) и осталось только это. В это случае будет уместно говорить о том “какую долю секунды займет склейка строк ‘, а какую — подстановка переменных в “.” ?

Повторюсь еще раз. Все оптимизировано именно для того, что бы увести тебя от мысли оптимизировать что-либо другое т.к тут был начал разговор конкретно по теме.

З.Ы. взирая на методы, которые были применимы в случае с PHP3 понимаешь, что СЕЙЧАС много уже не уместно (мощности увеличиваются), но кто его знает.. может когда и понадобится

said on September 14th, 2007 at 12:53 · Permalink

2LeKz: Вот ответь, положа руку на сердце, хоть раз в жизни тебе приходилось опускаться до оптимизации склейки строк? Я имею в виду насущную необходимость, а не просто “от скуки сел и все строки перефигачил”.

Если приложению не хватает производительности, то это не проблема программиста, выбравшего ", а одна из возможных проблем:

  • Администратор базы данных криво настроил СУБД
  • Неправильная настройка веб-сервера(ов)
  • Приложение недостаточно масштабируется
  • Начальство зажопило деньги на новый сервер
  • Неправильная, слишком усложненная архитектура

Но я уверен на 200%, строки в падении производительности не виноваты. Да, если ты везде заменишь двойные кавычки на одинарные, твое приложение сможет обслужить не 300 пользователей, а 320. И что это значит? Да ничего! Решение любого из перечисленных мной пунктов даст прирост больше шести процентов (цифры взяты с потолка, но думаю, они отражают реальное положение вещей). Намного больше.

Так что давайте перестанем играться бумажными самолетиками, а начнем строить нормальный рабочие боинги.

said on September 14th, 2007 at 12:55 · Permalink

Да, забыл сказать. Никогда не бывает такого, что все идеально настроено, а проблема только в строках :-) Это самообман. Привыкайте не видеть проблем там, где их и действительно нет.

said on September 14th, 2007 at 12:59 · Permalink

Кпум, неа. Не приходилось. А от скуки было :)

З.Ы. Да. Боинги! Клево!!!

said on September 14th, 2007 at 13:15 · Permalink

Простите, достопочтенные, что вмешиваюсь…
Давно уже не писал на PHP, но еще и не все забыл (наверное).

Согласен с BlackByte, что “Чем больше методов реализовать задачу, тем лучше”.

2 LeKz:
Не понимаю сравнения машин и памперсов, каким это боком касается конкатенации строк?

Согласен к Критиком, что строки винить не в чем при падении производительности, как практика показывает(показывала) – часто производительность падает(падала) от “криво” написанных запросов к БД.

З.Ы. Сам всегда писал

1
'text '.$b

и никогда не задумывался над оптимизацией СТРОК.

said on September 14th, 2007 at 15:02 · Permalink

За меня уже тут многое сказали. Дело не в мелочности, а в привычке. Я сам пишу ‘test’.$a не потому что это быстрей (я сам это узнал недавно), а просто потому что подсветка кода у меня так работает правильно. Но если знать такие элементарные особенности языка, то в будующем написанный код будет быстрее (если это коренным образом не влияет на читаемость кода).
Я и про оптимизацию загрузки страниц в целом писал, так что не сочтите за узость кругозора.

said on September 14th, 2007 at 15:35 · Permalink

2Артём: Знаю, что писал :-) Иначе не читал бы твой блог. А насчет строк — это просто было последней каплей. Я действительно натыкаюсь на очень много подобных штук, и многие люди действительно считаю, что после оптимизации строк, все проблемы решаются сами собой.

COTOHA
said on September 14th, 2007 at 18:54 · Permalink

вот ужоснах :) вот чесно – меня тоже бесит, что боян про оптимизацию пхп приложений перепечатывают уже 3й год ещё и без линка на оригинал. как тока новый пхпист заводит блог так что? вот оно самое.

но. критик, может ты про дотнет почитаешь?

если пхписты тупо копипастят бояны, то дотнетчики ещё и пишут тесты “using high resolution timer class found on codegear”. при чём постоянно :) мало того – некоторые показывают что “+” быстрее стринг_билдера и искренне недоумевают нах он тогда впал.

а к чему я это всё? ага. к тому, что ПХПисты – это дохера миллионов человек, а крик души у тебя вызывает 1 конкретный пост, про вопрос который волнует исчезающе малый процент людей. итак – с чего ты взял, что ПХПисты что-то там не могут решить? ПХПисты вообще решительнейшие люди на земле – после того, как они таки решились таки бросить ПХП4 (кстати ещё 1 пост, который меня утомил), я не вижу ничего, что бы им было не под силу :) :) :)

COTOHA
said on September 14th, 2007 at 18:59 · Permalink

ну и понудеть:

> PHPists are still can’t decide

не стыдно, а?

said on September 14th, 2007 at 20:25 · Permalink

2COTOHA: Про .НЕТ читаю, и видел про стрингбилдер. Эта тема поднимается довольно часто как на forums.asp.net, так и на rsdn.ru, но в блогах, на которые подписан (а их сильно больше, чем блогов по пхп в моем ридере), такая тема не поднималась. Но вообще да, есть темы, которые бесят там.

Теперь по поводу собственно вышеозначенного поста. ПХПисты — народ не только решительнейший, но и сильно увлекающийся. Т.е. если что-то вычитывают интересное, то сразу тянут в свой проект (это я сужу по себе в молодости и по людям, с которыми приходилось работать). Если написать в блоге, которому доверяет среднестатистический ПХПшник, что ADODB — говно, тормозит, и вообще сильно большой оверхед, из проекта удаляется эта обертка на базами, и либо юзаются прямые запросы, либо пишется своя библиотека (сам писал, каюсь). Если сказать, что ADODB — мощнейшая и удобнейшая библиотека, решает сразу тыщу миллионов проблем, и при этом работает очень быстро,– все, удаляются все свои наработки, PEAR::DB, прямые запросы, и добавляется ADODB. Бывают еще замечательные варианты (подскажи, никсовая библиотека, которую юзает весь харьков, с ее NDatabase, относится к таким?), когда пишется мегаобертка над библиотеками PEAR::DB и ADODB, чтобы можно было переключать их в конфиге. То же самое касается популярных ныне MVC фреймворков, различных CMS и плеяды более мелких инструментов. И главное, тут и сказать особо нечего — это как женская логика, все по-своему правы.

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

Прошу прощения у всех, кого обидел в этом комменте, я говорил, опираясь исключительно на мой печальный опыт работы с ПХП и ПХПистами.

А насчет предложения, неа, не смущает. Я ж никогда не говорил, что знаю инглиш. Так, просто пытаюсь. Может подскажешь, как правильно, запомню тогда на будущее…

COTOHA
said on September 15th, 2007 at 01:22 · Permalink

> ПХПисты — народ не только решительнейший,
> но и сильно увлекающийся.
> …
я наверное какой-то неправильный пхпист был :) искренне верю, что 98% такие же как я. всё интересное, что вычитано, мотается на ус и в будущем _возможно_ используется… ведь если солнце садится на западе, а встает на востоке и это проверено и работает, то кто ж его будет трогать? тока ненормальные, но я их не знаю… или они хорошо нычутся :)

> Может подскажешь, как правильно,
> запомню тогда на будущее…
PHPисты до сих пор не могут решить = PHPist can’t decide yet (или till now) (2 вспомогательных глагола низя: are + can’t)

если охота выпедрится, то = PHPist are still in an endless quest for Holy Grail of the True Quote

said on September 15th, 2007 at 10:05 · Permalink

Спасибо. Надо все-таки выучить инглиш каким-нибудь образом…

said on September 15th, 2007 at 11:53 · Permalink

Ух-ты!
А я тож когда на PHP писал, то юзал NDatabase.
Хочу поблагодарить – тогда она меня вполне устраивала, да и сейчас наверное устроила бы, если бы пришлось что-то писать на PHP.

З.Ы. Это мой первый коммент с Мак’а :)

said on September 15th, 2007 at 16:16 · Permalink

Во, ф тему:

Как отличить PHP-шника?
Он везде использует одинарные кавычки.

Источниг:
http://anekdot.ru/id.html?308355

erka
said on September 15th, 2007 at 16:55 · Permalink

hi
iphone at macstore
kyiv karavan

said on September 15th, 2007 at 17:32 · Permalink

Наверное стОит объяснить, почему я заапрувил предыдущий коммент, который очень похож на спам. Это мои друзья erka и STan тестили iPhone в “Караване” киевском. Вот, теперь у меня в блоге есть один коммент, отправленный с этого чудо-девайса :-)

ЗЫ. Топик превратился в оффтопик-генератор, потому пишите, что думаете обо всем на свете: PHP, iPhone, Украине и Киеве в частности, обо мне гадостном,– буду аппрувить все (кроме откровенного спама, конечно). Во как :-)

said on September 15th, 2007 at 20:57 · Permalink

Вот это флейм устроили. Убил бы каждого за любую оптимизацию на этапе разработки. Вот недавно нашел статические переменные на конекшины к базе данных в многопоточных вызовах. Можно только радоваться, что нашел. Так что ' или " — никакой разницы. Присоединяюсь к http://kpumuk.info/php/crazy-php-world/#comment-96643

PS. iPhone понравился. Говорят после нового года будет в Украине.

said on September 15th, 2007 at 21:52 · Permalink

Супер!
Спросите о чем это я?
Конечно об iPhone!
Очень впечатлила вещица!
Но я начинаю побаиваться (если или когда я его куплю) приносить его домой, потому что iPod nano недавно был успешно постиран и, конечно, не работает :(
Кто что посоветует креативного? :)

COTOHA
said on September 15th, 2007 at 22:47 · Permalink

опа. ифон через ви-фай или они его на какого-то оператора перевели (я ж ниче не пропустил и разлоченых ифонов официально не продают?!)?

said on September 16th, 2007 at 10:07 · Permalink

2 СОТОНА:
iPhone там работает через Wi-Fi, привязки ни к одному оператору у них нет. Поэтому нельзя потестировать отправку смс и других GSM-функций.
iPhone не то, чтобы разлоченных, а вообще никаких не продают официально…

said on September 17th, 2007 at 09:59 · Permalink

Вариант

1
"text $b"

хоть и красивее, но работает медленнее, чем

1
'text ' . $b

а ещё быстрей работает

1
echo 'text', $b

так как не надо склеивать строки.
Всё это конечно не имеет значения по большому счёту, но если надо выжимать скорость для мега проекта – то это имеет место

said on September 17th, 2007 at 10:19 · Permalink

Вот об этом я и говорил. Ведь мегапроект — это большой проект на ПХП, а не драйвера видеокарты? В большом проете ты не выжмешь никакой скорости, если будешь оптимизировать строки. Я уже несколько раз об этом писал!

said on September 17th, 2007 at 11:36 · Permalink

Думаю дело даже не в производительности, хотя мне один раз пришлось “перефигачивать”. но это долгая история.
Все гораздо проще ).
Дело в том, что подсветка синтаксиса даст нам что:

1
echo "hello $a";

hello $a – строка

1
echo 'hello '.$a;

hello – строка; $a – переменная.

Намнго улучшается читабельность и ускоряется отладка

said on September 17th, 2007 at 11:44 · Permalink

Неужели нет редакторов хороших для ПХП, которые подсвечивают нормально строки с переменными?

COTOHA
said on September 17th, 2007 at 12:23 · Permalink

есть конечно (и Zend и Eclipse). но имхо ж дело в не этом, а в том, что раз есть блог, то надо писать. а тут начинаются проблемы :) кстати, критик, на – с пылу с жару:
http://blog.cumps.be/string-concatenation-vs-memory-allocation/

я так вижу это для всех проблема :) на этот счёт посоветую прочитать Якова Фейна

said on September 19th, 2007 at 09:35 · Permalink

После своего последнего коммента, решил ещё раз зайти и прочитать новые. Написаши много, осилил.

Узнал даже что то новое для себя, за что спасибо. Хотел только для BlackCat’а прокоментировать его примеры. Последний его пример не самый быстрый. Быстрей все же будет:

1
<? $b='text'; ?>text <?=$b; ?>

В отличии от его примера:

1
echo 'text', $b

плайн текст, быстрей всего выводиться, если говорить о выводе, а не просто о работе со строками

RaR
said on October 5th, 2007 at 11:41 · Permalink

Просто не смог устоять. К данному флейму как нельзя лучше относится статья Джоэля

Harvy
said on November 7th, 2007 at 14:09 · Permalink

Предлагаю любителям двойных кавычек начать писать по человечески:

1
print "text {$b}"
said on December 3rd, 2007 at 02:09 · Permalink

Как по мне – так второй способ удобнее.
Да и все дело в привычке…

said on December 19th, 2007 at 17:20 · Permalink

Оптимизировать, так Оптимизировать!
‘строка ‘ . $variable;

akalend
said on December 21st, 2007 at 23:08 · Permalink

известный факт код: “text $b” будет исполняться медленнее, чем ‘text ‘ . $b;
но первый вариант изящнее.

said on February 4th, 2008 at 07:30 · Permalink

Вот и за примерами далеко ходить не нужно – сами пришли. Не встречал на своем веку приложений, где строки подставляются 10000000 раз. А если убрать даже пару нулей (на самом деле убирать придется значительно больше), остаются миллисекунды разницы, что собственно и показывает реальный выигрыш.

Кончайте заниматься ерундой!

said on February 4th, 2008 at 10:35 · Permalink

я нуп совсем в блоггинге :) не ожидал что запалюсь так ;)

зы: работать скрипт будет быстрей это факт все равно :) и для этого ненунжно циклы разворачивать или еще каких нить извратов, просто ставить ‘ ‘ :) берегите шифт

said on February 7th, 2008 at 01:03 · Permalink

Вот это пост! Столько всего написали, что пока дочитал мысль о комменте материализовалась в этот текст.

А теперь по пунктам:
IPhone – прекрасная вешь если у вас прошивка 1.1.1 – т.к. ломается за 15 минут при наличии только WiFi.

Конкатенция строк: Здесь пожалуй соглашусь с тем что нужно использовать по ситуации, т.к. в моем случае, при разделении кода и шаблонов а уж тем более в CMS системе.

Варианты типа

1
<? $b='text'; ?>text <?=$b; ?>

Отпадают сами собой по причине “калечности” кода и опять таки в случае с CMS если уж и использовать такой метод то придеться добавлять какие нибудь ob_start() методы для его последующего отлавливания. В крупном проекте HTML в коде это просто неприемлемо имхо.

А на сет скорости и кавычек тут все просто – нужно только заглянуть в недра PHP и увидеть, следующее:
При использовании

1
$a = 'text' . $a;

PHP просто соединяет переменные.
А в случае с
При использовании

1
$a = "text $a";

Он сначала ищет их в строке а потом производит операции замены…

Что уже есть +1 действие (поиск).

Ну и на конец как быть тогда с такими вариантами?

1
$a = 'text' . get_new_text($b.'new') . $a . 'finish';

Тут можно еще много тем поднять типа:
1) стоит ли писать скобки у print(‘asdasd’);
2) что быстрее print или echo?
3) в каком из низ конкатенция происходит быстрее?
и прочее =)

Всем удачи, пост понравился =)

CutePro
said on April 12th, 2008 at 06:31 · Permalink

The style

1
echo "My name is $myname";

is called string interpolation. it will take more time when comparing to the string concatenation style

1
echo 'My name is '. $myname;

if you do benchmark test of these notations you can find the difference.

the second one is the recommended practice.
Happy Programming !!!!!

More comments: 1 2

Comments are closed

Comments for this entry are closed for a while. If you have anything to say – use a contact form. Thank you for your patience.