Правильная структура ООП в PHP

Рейтинг: 0Ответов: 0Опубликовано: 24.01.2023

Я новичок, прошу максимально лояльно объяснить правильно ли я делаю структуру сайта?

У меня есть страница на которой я отправляю форму по аяксу в обработчик в котором подключаю класс 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. Пожалуйста, объясните на пальцах, что я делаю не так.

Ответы

Ответов пока нет.