PHP ООП: Как избежать расширенных классов, наследующих переменные экземпляра класса?

Я преобразовываю существующий веб-сайт из процедурного кода 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
}
?>

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]