Как разделить большую программу PHP (20 КБ) - PullRequest
2 голосов
/ 11 сентября 2010

Я скачал программу php blog и хочу разделить этот php-файл с одним файлом на несколько php-файлов. Цель состоит в том, чтобы организовать эту грязную программу. (Например, каждый php-файл обрабатывает одну функцию. edit.php редактирует сообщения и темы.) Кто-нибудь может дать мне идею? вот файл (я уже поработал): http://upit.cc/files/2cdea5ee.zip Файл, который я собираюсь разделить, это index.php.

Ответы [ 4 ]

2 голосов
/ 11 сентября 2010

Я сейчас не на своем домашнем компьютере, поэтому я не буду загружать файл, но вы можете разделить каждый класс (если он их использует) на несколько файлов php, а затем использовать require_once, чтобы включить их в основной файл.

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

Надеюсь, это поможет, это столько, сколько я могу предложить, не загружая код.

1 голос
/ 11 сентября 2010

Разделение кода называется «Рефакторинг». Я посмотрел на код, он очень условный.

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

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

перед:

if (condition_1){
 // CODE....
 // CODE....
 // CODE....
}

после

// move all the code from condition to file called includes/condition_1.php
if (condition_1){
   include_once 'includes/condition_1.php';
}

Подход 2 (может быть, слишком много для этого проекта):

Архитектура MVC

  1. Создать объект «контроллер», который будет отвечать за решение, что нужно выполнить. В основном все ваши условия будут идти туда
  2. Создание представлений, которые контроллер будет загружать и отображать
0 голосов
/ 11 сентября 2010

Первое, что я хотел бы сделать, это отделить весь код от основного цикла. Например, я бы взял весь этот код:

elseif(isset($_GET['view_post'])) {
    $_ps = sqlite_qrs('SELECT * FROM post WHERE id = \''.$_GET['view_post'].'\'');
    $_cm = sqlite_qr('SELECT * FROM comment WHERE pid = '.$_ps['id']);
    $_ct = sqlite_qrs('SELECT name FROM category WHERE id = '.$_ps['pid']);
    $meta = htmlspecialchars($_ps['title']);
    $body.= '...';
    foreach($_cm as $cm) {
        $body.= '...';
    }
}
elseif(isset($_GET['view_category'])) {
    $_ct = sqlite_qrs('SELECT * FROM category WHERE id = \''.$_GET['view_category'].'\'');
    $_ps = sqlite_qr('SELECT id, title FROM post WHERE pid = '.$_ct['id']);
    $meta = htmlspecialchars($_ct['name']);
    $body.= '...';
    foreach($_ps as $ps) {
        $body.= '...';
    }
}

И рефакторинг это так:

class View {

    public static function Post($post_id) {
        $_ps = sqlite_qrs('SELECT * FROM post WHERE id = \''.$post_id.'\'');
        $_cm = sqlite_qr('SELECT * FROM comment WHERE pid = '.$_ps['id']);
        $_ct = sqlite_qrs('SELECT name FROM category WHERE id = '.$_ps['pid']);
        $meta = htmlspecialchars($_ps['title']);
        $body.= '...';
        foreach($_cm as $cm) {
            $body.= '...';
        }
        return array($body, $meta);
    }

    public static function Category($category_id) {
        $_ct = sqlite_qrs('SELECT * FROM category WHERE id = \''.$category_id.'\'');
        $_ps = sqlite_qr('SELECT id, title FROM post WHERE pid = '.$_ct['id']);
        $meta = htmlspecialchars($_ct['name']);
        $body.= '...';
        foreach($_ps as $ps) {
            $body.= '...';
        }
        return array($body, $meta);
    }
}

[..]

elseif(isset($_GET['view_post'])) {
    list($body, $meta) = View::Post($_GET['view_post']);
}
elseif(isset($_GET['view_category'])) {
    list($body, $meta) = View::Category($_GET['view_post']);
}

После того, как я разделил части как статические методы, я начал думать о разделении HTML на шаблоны и код, связанный с базой данных, на модели.

0 голосов
/ 11 сентября 2010

Найдите его части, которые можно выделить, и удалите их из основного файла, сохранив их в своих собственных файлах. Затем вы можете использовать функцию php require_once ( url ), чтобы включить их на своей странице. По сути, ваш код будет выглядеть намного проще:

<?php
    require_once('header.php');
    require_once('body.php');
    require_once('footer.php');
?>
...