Структура файлов и классов в ООП PHP


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

У меня есть database.php файл, в котором я создаю соединение со своей базой данных, и в функции __construct моих классов я вызываю его, например:

<?php

include 'database.php';

class users {

// Database Connection
public function __construct() {
  $db = new database();
}

// the rest of my functions

?>

Проблема/вопрос, который у меня есть, заключается в том, что в учебных пособиях и упражнения, которые я делал, было только одно занятие. В настоящее время в моем проекте у меня есть 3 класса (пользователи, фильмы и списки просмотра), и все они имеют файл .php (users.php, movies.php и watchlists.php)

На определенных страницах моего проекта мне нужны данные из всех 3 классов, поэтому я начинаю эти страницы так:

<?php
session_start();

include 'include/users.php';
include 'include/movies.php';
include 'include/watchlists.php';
$user = new users();
$movie = new movies();
$watchlist = new watchlists();

// the rest of the file

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

Итак, как мне управлять своим классы, подключение к базе данных и файлы .php правильно при работе над таким проектом, как мой?

Вам не нужно объяснять все это, если вы можете связать меня с некоторыми замечательными статьями/учебными пособиями об этом, я буду вам очень признателен. (Да, я погуглил, но не смог найти ничего полезного).

Спасибо

Author: Gordon, 2013-05-20

3 answers

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

Заменить

include 'database.php'

До

include_once 'database.php'

И написание кода подключения примерно так

if(!$con) {
    $con = mysqli_connect(HOST, USER, PASS);
}
 2
Author: cipher, 2013-05-20 15:06:55

То, что вы хотите изучить, - это стандарт PSR-0 https://gist.github.com/Thinkscape/1234504

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

 1
Author: Orangepill, 2013-05-20 15:10:19

В большинстве стандартов кодирования PHP будет сказано, что единственное, что должен содержать "файл класса", - это определение класса. Это означает, что нет includes или requires. Итак, как вы разрешаете одному классу получать доступ к другому?

Автоматическая загрузка! Перейдите и прочитайте об автоматической загрузке, но краткое объяснение состоит в том, что вы определяете автозагрузчик в отдельном файле (том же файле, в котором вы фактически используете классы), и любые классы, которые вы вызываете, и любые классы, которые требуются этим классам, PHP идет и автоматически извлекает . Автоматическая загрузка хороша не только потому, что вам не нужно утруждать себя вводом операторов include, но и потому, что извлекаются только те классы, которые вы фактически используете, - так это более эффективно.

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

 1
Author: VettelS, 2013-05-20 17:17:07