Упрощение PHP-кода - PullRequest
       5

Упрощение PHP-кода

1 голос
/ 21 июля 2011

Я сейчас работаю над модернизацией моей CMS.В настоящее время я пытаюсь свести к минимуму интерфейсный код, чтобы упростить их оформление.Для отображения последних сообщений используется код, который я использую:

<?php 
   $query = mysql_query("SELECT * FROM posts order by id desc") or die(mysql_error());
   while($row = mysql_fetch_array($query)) :
?>
   <h3><a href="?id=<?php echo $row['id'] ?>"><?php echo $row['title'] ?></a></h3>
<?php endwhile; ?>

Как лучше всего упростить это для пользователя переднего плана?Я думаю об использовании файла functions.php, но я точно не знаю, как это сделать.Есть ли способ, которым я мог бы превратить первые две строки php в функцию, а затем пользователь должен был бы только вызвать функцию?

Ответы [ 4 ]

2 голосов
/ 21 июля 2011

Обычно вы используете два слоя.

  • Уровень доступа к базе данных: функция запросов принимает произвольные запросы, проверяет возвращаемое значение, записывает в файл ошибки, умирает при необходимости. Вы можете создать отдельные функции для запроса + извлечения данных за один шаг (query_one_row (), query_dataset_as_array (), ...).

  • Уровень модели данных: отдельные функции для каждого основного запроса, каждый из которых вызывает нижний уровень. Например: get_recent_posts (),

Попробуйте переписать ответ @ Саша, чтобы использовать эти два слоя.

1 голос
/ 21 июля 2011

примечание: я знаю, что не отвечаю на ваш вопрос, но просто хотел дать вам знать.

вы можете разделить различные проблемы кода. с одной стороны, это рендеринг данных, с другой - бизнес-логика и уровень персистентности. кажется, что вы кодируете все в одном файле, и это может усложнить задачу в будущем. попробуйте использовать mvc, например yii, zend framework или symfony2.

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

edit: для слоя персистентности вы можете попробовать doctrine2

1 голос
/ 21 июля 2011

Вот функция, которую вы можете использовать:

function getPosts() {
    $query = mysql_query("SELECT * FROM posts order by id desc") or die(mysql_error());
    $result = array();
    while($row = mysql_fetch_object($query)) {
        $result[] = $row;
    }
    return $result;
}

и в шаблоне:

<?php foreach(getPosts() as $post) : ?>
<h3><a href="?id=<?php echo $post->id ?>"><?php echo $row->title ?></a></h3>
<?php endforeach; ?>
0 голосов
/ 21 июля 2011

Чтобы немного улучшить ответ Саша выше, вы можете сделать это ...

<?php

foreach(getPosts() as $post)
{
    printf( '<h3><a href="?id=%d">%s</a></h3>', $post->id, $row->title );
}

?>

Работает точно так же, но немного легче для чтения, imo.

...