Почему я могу получить доступ к объектам PHP внутри строки?

Это некоторый код PHP для рендеринга элемента привязки HTML. Почему это:

$archives .= "&nbsp;<a href='" . get_year_link($archPost->year) . "'
title='Click to go to full listing for " . $archPost->year . "' target='_blank'>[List^]</a>";

работать точно так:

$archives .= "&nbsp;<a href='" . get_year_link($archPost->year) . "'
title='Click to go to full listing for $archPost->year' target='_blank'>[List^]</a>";

Исходя из C / C # и тому подобного, я предпочитаю первый вариант, потому что я думаю, что нельзя просто сбросить переменные smack-dab в середине строки. Очевидно, у PHP нет проблем с этим. Почему бы и нет?

-1

Решение

Это называется интерполяцией строк, и это также доступно в C #.

Лично я считаю использование интерполяции строк плохой практикой. Это затрудняет чтение кода в вашей среде IDE и может привести к неправильной интерпретации строк. (Возможно, вы хотели, чтобы этот знак доллара означал знак доллара, но потому что вы использовали двойные кавычки " вместо одинарных кавычек 'Теперь у вас есть ошибка.) Вместо этого я объединяю:

$var = 'something' . $somethingElse;

Если вы используете echoболее целесообразно выводить список, а не объединять:

echo 'something', $somethingElse;

Другая проблема, по крайней мере та, которая используется в вашем примере, заключается в том, что вы выгружаете данные напрямую в контекст HTML без экранирования. Если ваш вывод содержит зарезервированные объекты, вы будете генерировать недопустимый неоднозначный HTML Это может даже привести к проблемам безопасности в зависимости от используемого контекста, таким как проблемы XSS. Вы хотите использовать htmlspecialchars() вокруг любых произвольных данных, используемых в HTML. (Или используйте шаблонизатор, который сделает это за вас.)

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]