2011-06-30 4 views
1

Все следующие команды работают, но какой из них считается правильным с точки зрения безопасности, совместимости, скорости и других соглашений?Эхо-строка с несколькими переменными

//one 
echo "$row->first_name $row->last_name <br />"; 

//two 
echo $row->first_name . ' ' . $row->last_name .'<br />'; 

//three 
echo $row->first_name; 
echo $row->last_name; 
echo '<br />'; 
+0

4th: echo $ row-> first_name, $ row-> last_name, '
'; – Sinan

+1

Третий вариант в вашем ответе не совсем то же самое; вам не хватает 'echo '';'. – icktoofay

+1

Использовать "{$ row-> first_name}" вместо "$ row-> first_name" – Chris

ответ

3

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

echo "Welcome back, {$row->first_name} {$row->last_name}"; 

Более подробную информацию об этом типе синтаксиса можно найти в PHP Strings.

1

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

Редактировать: Я просто сделал небольшой тест, а второй метод является самым медленным. Первый метод второй - самый медленный. Третий метод - самый быстрый из тех, которые вы опубликовали, но тот, который предложил Синан, был примерно таким же результативным.

+0

Я сравнивал различные методы и опубликовал свои результаты, но я не уверен, насколько они точны. Если кто-то еще захочет сравнить его, сделайте это. – icktoofay

+0

+1 для бенчмарка. – CyberJunkie

4

Нет абсолютно никакой разницы в плане безопасности между выбранными вами вариантами. Я бы что-то вдоль линий:

<p class="name"><?php echo htmlspecialchars("$row->first_name $row->last_name"); ?></p> 
  • нет <br />, они обычно не хороший выбор
  • сделать свой стиль в CSS, используя классы
  • выход побег (безопасность !!)
  • отдельный HTML от PHP значения
  • минимальный синтаксис
  • разница в скорости не имеет значения
+0

Для «отдельного HTML из значений PHP» вам может потребоваться отложить ответ D Franks. IE '{$ row-> thing} s' vs." undefined property "' $ row-> things'. –

+0

@bob В этом случае нет двусмысленности, поэтому это не имеет значения. Если бы вы были «плюрализуете» свои строки, конечно, это было бы серьезной проблемой. Кроме того, где HTML-код там? – deceze

+0

Я думаю, что этот случай может быть двусмысленным (случайный пример свойств объекта, встроенный в строки), поэтому наилучшим может быть обобщенный ответ (комбинация из ваших плюс упоминание о D Franks's). Это только мое мнение. Re: «где там HTML», это «s», ссылаясь на окончательный/фактический вывод текста. Возможно, я неправильно понял. –

1

все они в порядке.

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

Я бы со второй, потому что, как я видел, как это используется в коммерческих PHP Software

+1

Первый вариант, вероятно, * slowest *, так как PHP должен разбирать строку для замещений переменных. – deceze

+0

@deceze, будет ли медлительность обнаружена людьми? Или это примечательно, если повторять строку несколько раз в цикле? – CyberJunkie

+1

@Cyber ​​Если у вас есть сомнения, * профиль * в обоих направлениях, но трудно представить, что вы когда-либо попадали в ситуацию, когда вы действительно заметили бы это. – deceze

1

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

+0

Конкатенация выполняется быстрее, чем синтаксический анализ: http://codepad.org/tXU5LAkQ. Вопрос, на который вы ссылаетесь, сравнивает неконкатенацию и конкатенацию, а не конкатенацию или разбор. – deceze

+1

@deceze. Переменные должны обрабатываться только один раз, создается множество конкатенаций - это может не произойти в его примере, но в более сложных строках синтаксический анализ будет быстрее. – ajnatural

+0

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

1

Я бы сказал, что быть более явным - это лучший способ пойти. Я также ожидал, что PHP займет больше времени, потому что он должен определить, являются ли токены переменными внутри строки или только части строки. Я наклоняюсь к 2, но иногда вам, возможно, придется разделить свои строки на новые строки из-за того, что вещи находятся под чем-то вроде 72 столбцов в соответствии с руководящими принципами разработки кода. Я бы предложил искать различные руководства по стилю кода, например, для Zend (http://framework.zend.com/manual/en/coding-standard.coding-style.html).

1

Как говорили другие, нет никакой разницы в безопасности только скорости/предпочтения.

Но одно, что нужно добавить, не избегать выхода на лету. Лучше фильтровать его, прежде чем он будет храниться в базе данных (один запрос), а затем продолжать делать это для каждого отдельного запроса в будущем.

Смежные вопросы