Подтвердить что ты не робот

Лучшие практики PHP?

Что такое хороший способ удалить код из отображаемых страниц при разработке с помощью PHP. Часто страницы, над которыми я работаю, должны быть отредактированы внешним лицом. Этот человек часто путается множеством блоков PHP, а также любит разбивать мой код.

Я попытался переместить блоки кода в функции, так что теперь теперь все функции распространяются по всему HTML. Поскольку некоторые страницы становятся более сложными, он снова становится программой, и обработка POST вызывает сомнение.

Что я могу сделать лучше в моей PHP-разработке?

4b9b3361

Ответ 1

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

Вот простой пример:

<?php 
$people = array('derek','joel','jeff');
$people[0] = 'martin'; // all your logic goes here
include 'templates/people.php';
?>

Теперь вот файл people.php(который вы дадите своему дизайнеру):

<html> 
<body>
<?php foreach($people as $name):?>
   <b>Person:</b> <?=$name?> <br />
<?php endforeach;?> 
</body>
</html>

Ответ 2

Посмотрите, как некоторые из популярных фреймворков PHP используют шаблоны. Примеры включают cakePHP, Zend Framework и Code Igniter. Даже если вы не собираетесь основывать свой сайт на этих фреймворках, шаблон шаблона шаблона является хорошим способом удержать PHP-код от ваших веб-дизайнеров, поэтому они могут сосредоточиться на макете, а не на функциональности.

Ответ 3

Мне кажется, что вам нужно начинать внедрять то, что известно как "разделение проблем" в вашем приложении в целом. Примеры, которые описывают шаблоны, в ответ на вашу конкретную жалобу на редакторы страниц, нарушающие ваш код, важны, но представляют собой лишь один пример этой тактики. По мере того, как ваша программа становится все более сложной, становится сложнее модифицировать и отлаживать, даже если ваш разработчик не нарушает ваш код.

Возможно, наиболее распространенным разделом является разделение между данными, логикой и представлением на три части, как описано в шаблоне проектирования Model-View-Controller (MVC). Вам не нужна полная версия MVC для реализации тех же основных принципов. Идея состоит в том, чтобы просто инкапсулировать код, который касается ваших данных (модели) в одном месте, код, который представляет эти данные пользователю (представление) в другом. Вы связываете этот код вместе с кодом, который связан только с представлением правильных данных правильному пользователю в нужное время (контроллер).

Из вашего описания это похоже на то, что вы сейчас являетесь Transaction Script, где у вас есть файл php "dothis.php", который загружается в браузере, и все определения функций и HTML для отображения вместе. У вас уже есть функции, поэтому вы уже начинаете инкапсулировать фрагменты логики.

То, как я подходил бы к этому, было бы, в соответствии с другими ответами здесь о шаблонизации, заключается в том, чтобы удалить весь HTML в другой файл, ссылаясь только на простые переменные PHP и, возможно, на некоторые циклы (но как мало условного переключения, как вы можете). Это упростит чтение и сложность шаблона. Когда ваш редактор страниц хочет изменить макет, дайте им этот файл.

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

В этот момент ваш "dothis.php" был удален до некоторого кода конфигурации (который вы можете разделить на include и некоторый код аутентификации (который вы можете разделить на свой собственный класс) и только вызов функций доступа к данным и вызов включенного файла шаблонов. Поэтому ваш контроллер очень упрощен и упрощен для управления.

Ответ 4

Требуется ли внешнему человеку отредактировать логику или просто отображение (HTML)?

Если это последний случай, посмотрите Smarty механизм шаблонов.

Ответ 5

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

В нем также есть главы по рефакторингу, модульному тестированию и шаблону управления MVC.

Ответ 6

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

Переполнение стека хочет, чтобы я решил, какой ответ лучше, когда лучше всего субъективное мнение. Кто скажет, что такое "лучшая" практика.

Ответ 7

Если вы решите продолжить использование функций, вы можете получить вдохновение от WordPress. Вероятно, вы можете уменьшить "программу" до минимума, сделав шаблоны более подробными.

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

Другим способом является создание собственной системы шаблонов вместо SMARTY, но, вероятно, потребуется слишком много времени, чтобы создать рабочую систему, которая бы удовлетворяла ваши потребности, которая прошла бы просто заменяя что-то вроде %% VARIABLE %% с текст.

Наша компания использует SMARTY и даже с большим количеством кода в шаблонах, дизайнеры знают, как с этим работать. Для простых сайтов CMS мы используем ExpressionEngine, который использует HTML-подобные теги для вставки логики в шаблоны.

Ответ 8

В этой теме многое можно сказать, но очень простой отправной точкой было бы перемещение как можно большего количества кода в отдельные файлы, а затем использование операторов include.

Ответ 9

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

$userName = "John Doe";
$dateOfBirth = "04/02/1982";

function calculateUserAgeFromBirth($userName, $dateOfBirth)

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