Структура приложения PHP - PullRequest
4 голосов
/ 07 июля 2011

Я начал делать сайт, и быстро обнаружил, что мой код - беспорядок. Прошло много времени с тех пор, как я программировал на PHP, и с тех пор я изучал ООП. Теперь, хотя создание приложения на C # или Java довольно просто с этой точки зрения, PHP доставляет мне проблемы.

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

Пример: У меня есть account.php, и я хочу обновить информацию о пользователе. Итак, после проверки, что кто-то отправил данные if(isset($_POST[.., что дальше? Я просто делал все проверки, такие как $email=CheckForRisksOrSomething($_POST["email]);, а затем просто обновить MySQL.

Это подводит меня к вопросу: я должен создать класс Пользователь и какие методы он должен содержать? Также WHERE в случае сохранения этого класса, при условии, что user.php покажет вам профиль пользователя.

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

$smth = new Someclass();
if($smth->checkIfSaved()){
    $user = new User();
    $user->updateUser(/* all the $_POST stuff here? */); 
} else {
    $smth->showUserDetailsForm();
}

Также, где должен быть сохранен Someclass?

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

  • пользователей (регистрация, логин, редактирование аккаунта ..)
  • картинка с комментариями
  • новости (также с комментариями)
  • Администрация

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


РЕДАКТИРОВАТЬ 24.2.2016

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

Ответы [ 4 ]

3 голосов
/ 07 июля 2011

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

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

То, что вы хотите сделать, это создать папку специально для ваших классов. Как вы знаете, когда вам нужно будет создать новый класс, и что включить? Хороший вопрос!

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

Например, класс User для обработки любых изменений, которые вы хотите внести в пользователя вашего сайта. Другим примером является класс Role, который может выполнять задачи (или нет) в зависимости от того, являются они администратором или нет. Замечательная вещь об объектах и ​​классах состоит в том, что вы можете создать User :: $ role (переменную с именем $ role в классе User), который является классом Role. Так, например, у вас будет объект Role в вашем объекте User. Отсюда ваш пользовательский объект теперь может вызывать объект роли, выполняя что-то вроде:

class User {
    private $username;
    private $role;

    function __construct($username){
        $this->username = $username;
    }
    public function setRole($roleType){
        switch($roleType){
            case "admin":
                $this->role = new Admin(); // contained in another class file
                break;
            case "staff":
                $this->role = new Staff(); // contained in another class file
                break;
            default:
                $this->role = new Visitor(); // contained in another class file
            } // end case
        } // end setRole
} // end Class User

$loggedInUser = new User("Bubba");
$loggedInUser->setRole("admin");
$loggedInUser->role->deleteMessage();

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

Ознакомьтесь с книгой Мэтта Зандстры "Объекты, шаблоны и практика PHP 5", опубликованной Apress. Это замечательная книга, которая погружает ваши пальцы в ООП с PHP!

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

Очень трудно сказать вам, как вы должны это сделать. Есть много разных предпочтений там. Посмотрите на такие структуры, как Zend , Kohana , CodeIgniter и т. Д.

Когда я создаю небольшие приложения с дизайном ООП, я обычно стараюсь следовать следующей иерархии:

  • В число index.php входит bootstrap.php.
  • В bootstrap.php включены все классы и конфиг.
  • Создайте каталог classes, в котором вы можете сохранить все основные функции в папке core.
  • Кроме того, в вашей директории classes создайте две папки controllers и models.
  • В моих проектах у меня обычно есть другая папка templates, в которую входят все мои html-файлы (а затем обрабатываются с помощью Smarty Template Engine).

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

class UserModel() {
    public $name;
    public $email;
}

А затем контроллер, который может модифицировать эту модель:

class UserController() {
    public function update($user) {
        ...
    }
}
0 голосов
/ 07 июля 2011

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

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

Мой ответ может не отвечать непосредственно на ваши вопросы, но может принести вам много пользы.

Идите с реальной структурой.Не создавайте сайты с нуля.Это сэкономит вам огромное количество времени и заставит вас использовать хорошие методы разделения кода, действительно хорошую и чистую структуру проекта, но опять же, это сэкономит ваше время!Для многих вещей, которые вы решите реализовать там, будет готовое решение, и обычная вещь, которую вы делаете (в качестве подтверждения адреса электронной почты), будет сделана правильным образом.в прошлом много использовал CakePHP, Zend, Kohana и несколько других, я бы порекомендовал вам пойти с Yii.Очень маленькая кривая обучения, хорошие документы, хорошее большое активное сообщество, и вы сможете перенести на него все, что у вас уже есть, за очень короткое время.Фреймворк сократит ваше время как минимум в 2 раза, и в то же время у вас уже будут решены все вопросы, о которых вы просили.Я знаю это по своему опыту, разрабатывая проекты с нуля довольно давно.

...