Я преобразовываю существующий веб-сайт из процедурного кода PHP в ООП. Я хотел бы установить класс Permissions, который содержит информацию, такую как данные $ USER, относящуюся к нескольким расширенным классам (например, База данных, Логин, Проверка и т. Д.).
Могу ли я установить переменные экземпляра класса для дочерних классов (т. Е. Базы данных, имени входа, проверки) в родительском классе (т. Е. Разрешения) с помощью магического метода __construct (), и они отображаются в каждом дочернем классе, кроме класса, на который они ссылаются?
то есть «база данных класса расширяет разрешения» не включает Permissions :: $ db, в противном случае возникает цикл и ошибка.
Примеры фрагментов кода приведены ниже:
<?php
class Permissions {
protected $db = '';
protected $login = '';
protected $val = '';
protected $USER = array (); // i.e. $this->USER['id'], $this->USER['access-level']
public function __construct() {
$this->db = new Database();
$this->login = new Login();
$this->val = new Validation();
// Code to populate $this->USER
}
}
class Database extends Permissions {
// Code
}
class Login extends Permissions {
// Code
}
class Validation extends Permissions {
// Code
}
?>
Лучше ли каждому дочернему классу обращаться только к тем классам, к которым он должен получить доступ? то есть
<?php
class Permissions {
protected $USER = array (); // i.e. $this->USER['id'], $this->USER['access-level']
public function __construct() {
// Code to populate $this->USER
}
}
class Database extends Permissions {
// Code
}
class Login extends Permissions {
private $db = '';
public function __construct() {
$db = new Database();
}
// Code
}
class Validation extends Permissions {
public function __construct() {
$db = new Database();
}
// Code
}
?>
Задача ещё не решена.
Других решений пока нет …