Лучшая практика: куда поместить код PHP? - PullRequest
9 голосов
/ 29 июля 2011

Я признаю, что этот вопрос будет немного расплывчатым, но я попытаюсь объяснить, что я пытаюсь сделать, несколькими примерами. У меня есть некоторый PHP-код, который загружает кучу переменных из базы данных MySQL, содержит некоторые объявления, некоторые функции для быстрого вывода HTML-кода и т. Д. Однако я хотел бы сделать все эти вещи, прежде чем что-либо будет отправлено клиенту.

Итак, я делаю:

<?php
include("somefile.inc");
function bla()
{
    ...
}

if (fails)
    echo "Error: ...<br />";

?>
<!DOCTYPE>
<html>
    <head>
        <script>
            ...
            <?php echo $someString; ?>
            ...
        </script>
    </head>
    <body>
        ...
    </body>
</html>

Это все нормально и хорошо, пока я не получу ошибку. Эхо не будет отображаться в браузере, потому что это прежде всего HTML ... Так что я изменил:

<!DOCTYPE>
<html>
    <head>
        <script>
            ...
            <?php echo $someString; ?>
            ...
        </script>
    </head>
    <body>
        <div class="error_block">
            <?php
            include("somefile.inc");
            function bla()
            {
                ...
            }

            if (fails)
                echo "Error: ...<br />";

            ?>
        </div>

        ...

    </body>
</html>

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

Мне действительно не нравится разделять код в блоке error_clock на некоторые над документом HTML, а некоторые в блоке error_block. И я также не хочу использовать PHP-функцию die (), которая резко завершает выполнение.

Кто-нибудь может дать свои 2 цента по этому вопросу? Спасибо.

Ответы [ 3 ]

5 голосов
/ 29 июля 2011

Если вы ищете альтернативное решение, у меня есть для вас.Что мне нравится делать, так это иметь логику до DOCTYPE

if(error) { $error = "Please do something" }

Чем ниже, в документе у меня есть div только за ошибку (Спасибо @Dave за ввод)

<?php echo $error != '' ? '<div id="error">' . $error . '</div>' : ''; ?>

Этот div не появится, если нет ошибки (то есть $error пусто), и вам будет проще стилизовать сообщение об ошибке так, как вы хотели бы

#error { color:red; }

Если вы хотите получить фантазию, вы можете использовать jQuery, чтобы скрыть / показать div, чтобы ошибка не сохранялась.

$('#error').show().delay(7000).fadeOut();
0 голосов
/ 30 июля 2011

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

0 голосов
/ 29 июля 2011

Что часто забывают, так это то, что PHP по сути является языком программирования INLINE, это означает, что он предназначен для обработки сервером, когда сервер считывает страницу, и с его помощью он разбивается на куски. Недавно ООП (объектно-ориентированное программирование) было введено в PHP, что делает его более гибким.

Таким образом, с этой информацией я бы выбрал путь ООП в этом случае и сделал бы что-то вроде:

<!DOCTYPE>
<?php
include("somefile.inc");
function bla()
{
    ...
}
function failureError($code){
    if(!empty($code)) ...
}
if ($a = $b) {
    code goes here 
} else {
    $code = 'error123';
}
?>
<html>
    <head>
        <script>
            ...
            <?php failed($code); ?>
            ...
        </script>
    </head>
    <body>
        ...
    </body>
</html>

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

Еще один способ объявить класс (ы) / функции ошибок, чтобы помочь с временем отклика сервера, это сделать что-то вроде:

if ($a = $b) {
    code goes here 
} else {
    include("errorStuff.php");
}

Это будет включать только класс (ы) ошибок / функции, когда обнаружена ошибка.

Просто помните, когда вы пишете PHP с такими методами ООП, как этот, серверу потребуется больше времени для обработки сценария, чем если бы вы писали inline. Самым большим преимуществом ООП является то, что оно сократит ваше время разработки и, если все сделано правильно, облегчит администрирование будущих обновлений вашего скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...