Правильная структура ООП в PHP
Я новичок, прошу максимально лояльно объяснить правильно ли я делаю структуру сайта?
У меня есть страница на которой я отправляю форму по аяксу в обработчик в котором подключаю класс user.
Обработчик:
session_start();
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/user.php";
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if(isset($_POST["profileedit"])) {
$user->update();
}
}
Класс юзер, там тоже подключаю классы, так как они используются в функциях этого класса (не уверен, что это правильно.)
session_start();
require_once $_SERVER['DOCUMENT_ROOT'] . "/config.php"; // подключение к базе
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/settings.php";
$settings = new settings();
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/user.php";
$user = new user();
class user {
public $id;
public $name;
...
public $email;
public $password;
public function __construct() {
global $conn;
try {
$identity = array (
'id' => $_SESSION["id"]
);
if ($result !== FALSE) {
$sql = $conn -> prepare("SELECT * FROM users WHERE id=:id LIMIT 1");
$sql -> execute($identity);
$result = $sql -> fetchAll();
foreach ($result as $row) {
$this->id = $row["id"];
$this->name = $row["name"];
$this->email = $row["email"];
$this->password = $row["password"];
}
} catch (PDOException $e) {
echo $e->getMessage();
}
}
public function update() {
global $conn;
global $user;
global $lang;
try
{
$currentemail = $user->email;
if ($_POST['email'] !== '' && $_POST['email'] !== $currentemail) {
$useremail = [
'email' => $_POST['email']
];
$sql = $conn -> prepare("SELECT email FROM users WHERE email=:email LIMIT 1");
$sql -> execute($useremail);
$result = $sql -> fetchAll();
if ($result != NULL) {
echo $lang->emailinuse;
die;
}
}
$userdata = [
'id' => $_SESSION["id"],
'name' => $_POST['name'],
'country' => $_POST['country'],
....
];
$sql = $conn -> prepare("UPDATE users SET name=:name, password=:password, sex=:sex, country=:country, city=:city, age=:age, visit=:visit, about=:about, notifications=:notifications, height=:height, weight=:weight, family=:family, children=:children, habitation=:habitation, income=:income WHERE id=:id");
$sql -> execute ($userdata);
}
catch (PDOException $e)
{
echo $e->getMessage();
}
}
}
У меня всё работает, но на сколько правильно так строить структуру сайта. Меня беспокоят именно включения (require_once) классов в классы и дальнейшее их объявление в функции этого класса через global, чтобы вывести например $user->email. Пожалуйста, объясните на пальцах, что я делаю не так.
Источник: Stack Overflow на русском