Сумасшедший мир PHP

Sep 14
2007 00:56 (PHP) · English (4,972 views)

Мы живем в XXI веке, а PHPисты до сих пор не могут решить, как писать: "text $b" или 'text ' . $b. Медленно схожу с ума.

via Artjom Kurapov.

51 отзывов на 'Сумасшедший мир PHP'

Подписаться на комментарии по RSS или TrackBack на 'Сумасшедший мир PHP'.

1
сказал 14.09.2007 в 2.09

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

Btw, RubyOnRails has the power =)

2
сказал 14.09.2007 в 2.23

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

"text " + b

vs

string.Format("text {0}", b)
3
сказал 14.09.2007 в 9.13

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

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

4
сказал 14.09.2007 в 9.15

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

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

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

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

5
сказал 14.09.2007 в 9.25

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

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

6
сказал 14.09.2007 в 9.26

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

7
сказал 14.09.2007 в 9.34

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

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

8
сказал 14.09.2007 в 9.43

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

<?
 $a='Hello World';
?>
<a href="/"><?=$a?></a>

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

9
сказал 14.09.2007 в 11.23

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

10
сказал 14.09.2007 в 12.00

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

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

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

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

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

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

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

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

11
сказал 14.09.2007 в 12.12

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

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

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

12
сказал 14.09.2007 в 12.23

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

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

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

13
сказал 14.09.2007 в 12.41

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

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

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

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

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

14
сказал 14.09.2007 в 12.53

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

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

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

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

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

15
сказал 14.09.2007 в 12.55

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

16
сказал 14.09.2007 в 12.59

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

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

17
сказал 14.09.2007 в 13.15

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

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

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

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

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

'text '.$b

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

18
сказал 14.09.2007 в 15.02

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

19
сказал 14.09.2007 в 15.35

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

20
COTOHA
сказал 14.09.2007 в 18.54

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

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

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

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

21
COTOHA
сказал 14.09.2007 в 18.59

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

> PHPists are still can’t decide

не стыдно, а?

22
сказал 14.09.2007 в 20.25

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

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

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

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

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

23
COTOHA
сказал 15.09.2007 в 1.22

> ПХПисты — народ не только решительнейший,
> но и сильно увлекающийся.
> …
я наверное какой-то неправильный пхпист был :) искренне верю, что 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

24
сказал 15.09.2007 в 10.05

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

25
сказал 15.09.2007 в 11.53

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

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

26
сказал 15.09.2007 в 16.16

Во, ф тему:

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

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

27
erka
сказал 15.09.2007 в 16.55

hi
iphone at macstore
kyiv karavan

28
сказал 15.09.2007 в 17.32

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

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

29
сказал 15.09.2007 в 20.57

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

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

30
сказал 15.09.2007 в 21.52

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

31
COTOHA
сказал 15.09.2007 в 22.47

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

32
сказал 16.09.2007 в 7.23

[...] в блоге Dmytro Shteflyuk’s Home о нескончаемых спорах php программистов о том, как лучше писать ‘this text [...]

33
сказал 16.09.2007 в 10.07

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

34
сказал 17.09.2007 в 9.59

Вариант

"text $b"

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

'text ' . $b

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

echo 'text', $b

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

35
сказал 17.09.2007 в 10.19

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

36
сказал 17.09.2007 в 10.26

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

37
сказал 17.09.2007 в 11.36

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

echo "hello $a";

hello $a - строка

echo 'hello '.$a;

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

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

38
сказал 17.09.2007 в 11.44

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

39
COTOHA
сказал 17.09.2007 в 12.23

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

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

40
сказал 19.09.2007 в 9.35

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

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

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

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

echo 'text', $b

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

41
RaR
сказал 05.10.2007 в 11.41

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

42
Harvy
сказал 07.11.2007 в 14.09

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

print "text {$b}"
43
сказал 03.12.2007 в 2.09

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

44
сказал 19.12.2007 в 17.20

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

45
akalend
сказал 21.12.2007 в 23.08

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

46
сказал 04.02.2008 в 6.34

[...] тут недавно у одного адепта, что не имеет смысла оптмизировать строки и писать в [...]

47
сказал 04.02.2008 в 7.30

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

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

48
сказал 04.02.2008 в 10.35

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

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

49
сказал 07.02.2008 в 1.03

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

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

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

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

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

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

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

$a = 'text' . $a;

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

$a = "text $a";

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

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

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

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

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

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

50
CutePro
сказал 12.04.2008 в 6.31

The style

echo "My name is $myname";

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

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 !!!!!

51
DmitriKadykov
сказал 09.05.2008 в 8.59

Если про PHP - конкатенация быстрей интерполяции. Но я использую её по той причине, что не хочу при заморачиваться с интерпояцией, ставить эти фигурные скобки, если передаётся что ни-будь типа $a[i]. Разница в производительности несущественна, это дело вкуса, равно как и выбор стиля кода. Нормальные разработчики о вкусах не спорят.

Оставить отзыв

Вы можете использовать простые теги форматирования HTML (вроде <a>, <ul> and others). Чтобы вставить пример код, используйте <code lang="php">$a = "hello";</code> (поддерживаемые языки: ruby, php, yaml, html, csharp, javascript). Также Вы можете использовать <code>$a = "hello";</code>, синтаксис не будет подсвечен. Если вы не хотите использовать тег <code>, замените символ < на &lt;.

Отправить

 
Copyright © 2005 - 2008, Dmytro Shteflyuk