html код внутри php функции ?> … <?php - так можно делать?

158
22 апреля 2018, 21:50

Есть ли какая нибудь разница между следующим кодом
Для примера возьму add_action хук из wordpress

function example(){
echo "Text";
}
add_action('action', 'example');

И вот этим кодом

function example(){
?>
<h1>Text</h1>
<?php
}
add_action('action', 'example');

Есть ли какие-нибудь подводные камни в использовании второго вариатна? Или это просто одна из возможностей
Понимаю что вопрос ужасно нубский, но все же хотелось бы узнать чтобы в дальнейшем избежать таких неточностей
Очень удобно использовать второй вариант когда нужно запихнуть много html кода в функцию, да и результат одинаковый, но я не уверен насколько это правильно так делать

Answer 1

Это валидная PHP функция:

function example(){
    ?>
    <h1>Text</h1>
    <?php
}

Пример работы.

Answer 2

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

Answer 3

но все же хотелось бы узнать чтобы в дальнейшем избежать таких неточностей

С точки зрения правильности кода - всё OK. А вот с точки зрения любой CMS - абсолютно не верно прописывать контент в файлы.

Answer 4

Очень удобно использовать второй вариант когда нужно запихнуть много html кода в функцию

Если у вас много html кода - генерируйте его с помощью циклов (разумеется, насколько это возможно). Или сохраняйте ваш html код в отдельный файл, который подключайте прямо в тело функции.

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

Если в вашей функции выполняется два действия - разделите их по отдельности (например, одна функция пишет текст в файл, другая - читает из файла, и т.п.) Это так же позволит давать адекватные названия пользовательским функциям.

В принципе, оба ваши варианта не правильны с точки зрения функций, т.к. ни в первом случае:

function example(){
    echo "Text";
}

ни во втором:

function example(){
    ?>
    <h1>Text</h1>
    <?php
}

из функции ничего не возвращается. По сути, это не функции (хотя они и выглядят внешне функциями), а процедуры (поправьте меня, если я где-то ошибся). Правильно было бы записать функцию с оператором возврата значения return:

function example(){
    return "Text";
}
READ ALSO
Пропала подсветка синтаксиса php VS code

Пропала подсветка синтаксиса php VS code

Проблема возникает уже второй разВ первый раз все нормализовалось само, после переустановки

181
Пытаюсь сделать последователей в Django или ManyToMany

Пытаюсь сделать последователей в Django или ManyToMany

Не пойму в чём проблема, укажите на мои ошибки пожалуйста, если это возможно

244
Error : object reference not set to an instance of an object

Error : object reference not set to an instance of an object

Подскажите почему при загрузке json из файла я получаю данную ошибку?Может есть способ отдебажить это?

250