Структура файлов и классов в ООП 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 правильно при работе над таким проектом, как мой?
Вам не нужно объяснять все это, если вы можете связать меня с некоторыми замечательными статьями/учебными пособиями об этом, я буду вам очень признателен. (Да, я погуглил, но не смог найти ничего полезного).
Спасибо
3 answers
Вы не будете подключаться к базе данных три раза подряд, если выполните только эти простые шаги.
Заменить
include 'database.php'
До
include_once 'database.php'
И написание кода подключения примерно так
if(!$con) {
$con = mysqli_connect(HOST, USER, PASS);
}
То, что вы хотите изучить, - это стандарт PSR-0 https://gist.github.com/Thinkscape/1234504
Большинство готовых загрузчиков проще всего работают с этим стандартом.
В большинстве стандартов кодирования PHP будет сказано, что единственное, что должен содержать "файл класса", - это определение класса. Это означает, что нет include
s или require
s. Итак, как вы разрешаете одному классу получать доступ к другому?
Автоматическая загрузка! Перейдите и прочитайте об автоматической загрузке, но краткое объяснение состоит в том, что вы определяете автозагрузчик в отдельном файле (том же файле, в котором вы фактически используете классы), и любые классы, которые вы вызываете, и любые классы, которые требуются этим классам, PHP идет и автоматически извлекает . Автоматическая загрузка хороша не только потому, что вам не нужно утруждать себя вводом операторов include
, но и потому, что извлекаются только те классы, которые вы фактически используете, - так это более эффективно.
Еще один момент, который следует отметить, обычно рекомендуется хранить все ваши классы в их собственной папке, а затем фактически использовать эти классы из за пределами этой папки. Опять же, это всего лишь соглашение, но оно также немного упрощает реализацию автоматической загрузки.