php
2010-05-16 5 views 1 likes 
1

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


<? echo '<li><img src="'.$row['image'].'" /></li>';?> 
or 
<? echo "<li><img src='$row[image]' /></li>";?> 

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


благодаря

+1

Не забудьте применить к этим данным 'htmlspecialchars'. – Gumbo

+0

Этот вопрос субъективен, поскольку ОП «хочет знать, что является лучшим методом» (из его комментария ниже), поскольку мелочь незначительной вещи принадлежит конвенции, а не лучшей практике. –

ответ

0

Я бы даже использовать <?php echo '<li><img src="' . $row['image'] . '" /></li>'; ?>

Там разница скорости, но это было бы едва измеримое и обычно вообще не заметно. Каждая строка в двойных кавычках сначала анализируется. Поэтому лучше не использовать двойные кавычки для строк. Если вы используете чрезвычайно много струн с vars в нем, это может стать измеримой разницей - но делать это было бы очень плохой дизайн в первую очередь.

Btw: То же самое верно для частого включения и выключения парсера с помощью <?php и ?>.

Основная причина для этого - хорошая практика кодирования.

Другие, возможно, также должны понимать ваш сценарий. И, может быть, и через несколько лет. Вары в строках могут быть проще пропущены, чем варны, включенные так. Тем более на IDE с подсветкой синтаксиса.

Я даже видел, как люди помещали новую строку перед каждым вар, вставленным таким образом. Но ИМХО это слишком много. ;)


Более или менее оффтоп: Нет, я не читал все бои происходит в других ответов, но я знаю, что старый «нет, это не медленнее» против «Да, это» детский сад на сердце. ;)

Для радости ради, вы кодеры, черт. Просто проверить:

<?php 
$startt = microtime(true); 

for ($i = 0; $i <= 10000000; $i++) { 
    $test = 'This is test number ' . $i; 
// $test = "This is test number " . $i; 
// $test = "This is test number $i"; 
} 

$endt = microtime(true); 
echo 'Used time: ' . ($endt - $startt); 
?> 

Для меня первый один дал 5.1321198940277, второй 5.2075009346008 и один 6.4821639060974 (разница более чем в 1,2 СЕК) третий. Что и требовалось доказать так далеко.

Интересным было бы попробовать это на разных системах. Возможно, я сделаю свой собственный вопрос.

+0

Не могли бы вы объяснить, что «каждая строка в двойных кавычках разобрана первым»? Я не понимаю, как это значение и разница в скорости. –

+0

Это абсолютно неправильный способ выполнения тестов производительности. Скорость не является одной из причин выбора между методами печати. Любая проблема, которую вы не можете измерить с помощью тестов в реальном мире, не должна приниматься во внимание. мы кодеры, да. но «давайте запускаем бесполезное дерьмо за миллион раз», это не тест вообще. Почему бы не использовать хотя бы тест 'ab' для запроса какого-либо скрипта, делающего что-то разумное? –

+2

Наступил ли я на твою священную землю, сенсей Шрапнель-сан? ;) Я говорил о скорости в своем ответе. И когда вы пытаетесь измерить скорость, считается хорошей практикой для измерения скорости. Если это бремя вашего сердца: я провел несколько тестов и дал самые средние результаты. Конечно, запросить циклы CPU, память, кеширование, ввод-вывод и т. Д. Было бы интересно. Но так как я не говорил об этом, зачем мне это измерять? На самом деле, я немного ленив, чтобы создать целый набор тестов для этого ответа. Но не стесняйтесь делать это сами, если вы чувствуете необходимость защищать свою святую книгу. –

1
echo sprintf('<li><img src="%s" /></li>', $row['image']); 

Гораздо легче читать и менее склонны к ошибкам, если получить изменилось/продлен позже.

+1

Я бы даже зашел так далеко, что предложил использовать какую-то систему шаблонов. – rossipedia

+0

Я бы сделал это echo sprintf ('

  • ', htmlentities ($ row ['image'], ENT_QUOTES)); (ну, URI не должен содержать HTML-код «bd», но лучше быть в безопасности) – johannes

    +0

    @Bryan: Использование View-Scripts, которые содержат только выходные инструкции, как это, уже является простой системой шаблонов. Zend Framework, например, делает это таким образом, и это очень удобно использовать. – selfawaresoup

    1

    Другой метод:

    <li><img src="<?php echo($row['image']); ?>" /></li> 
    
    +1

    да, вы также можете написать src = "" ... Я хочу знать, что является лучшим методом – Simon

    +0

    @Syom, который на 100% субъективен, так как есть незначительная производительность разница между вариациями. Все литералы HTML в PHP в значительной степени превращаются в эхо-инструкции в любом случае, так что это действительно вопрос того, что выглядит красивее для вас и с ним проще всего работать. – rossipedia

    +0

    Syom, это не будет работать на всех установках - короткие теги могут быть отключены, поэтому переносное приложение не может положиться на него. – johannes

    0

    Во втором методе:

    <? echo "<li><img src='$row[image]' /></li>";?> 
    

    вы не можете использовать функции, вы можете использовать только переменные. Неважно, какой метод вы используете, если печатаете переменные.

    1
    <? echo '<li><img src="'.$row['image'].'" /></li>';?> 
    

    Разумная стратегия заключается в выводе всего статического содержимого в простой PHP-шаблоне. Таким образом, вам не придется беспокоиться о PHP строкового литерала бежать в статическом содержании:

    <li><img src="<? echo $row['image']; ?>"/></li> 
    

    Однако, (а) вам нужно использовать htmlspecialchars() на всех выходные сырых текстовых строк в HTML, или вы возникли проблемы межсайтового скриптинга. Кроме того, следует избегать коротких тегов <?, так как они не могут быть включены на всех серверах.

    Чтобы сократить количество нажатий клавиш «htmlspecialchars» в шаблонах, определить функцию быстрого доступа:

    <?php 
        function h($s) { 
         echo htmlspecialchars($s, ENT_QUOTES); 
        } 
    ?> 
    
    <li><img src="<?php h($row['image']); ?>"/></li> 
    
    2

    Лучше всего было бы использовать только один метод.

    0

    Если вы используете ' в ваших HTML-теги для задания значений атрибутов используйте " в PHP, и если вы используете " в HTML, то используйте '. В любом случае вам не нужно будет бежать цитату в HTML с помощью \

    0

    самый быстрый способ вызвать echo функцию с несколькими параметрами вместо строки, содержащей каскадные параметры:

    echo '<li><img src="',$row['image'],'" /></li>'; 
    

    является эквивалентом

    echo '<li><img src="'; 
    echo $row['image']; 
    echo '" /></li>' 
    

    который быстрее, чем

    echo '<li><img src=";'.$row['image'].'" /></li>'; 
    
    Смежные вопросы