В настоящее время я создаю мини-рамки для проекта и придумываю это решение. Я попробовал многие из них, но это мне кажется очень удобно (код укорачивается для простоты):Советы по дизайну каркаса
# Basically it's just a Registry pattern
class Repository {
private static $objects = array();
public function loadObject($alias, $object) {
self :: $objects[$alias] = $object;
return true;
}
public function __get($name) {
if ($this->objectExists($name)) {
return self::$objects[$name];
} else {
return false;
}
}
}
class Database extends Repository {
/* database class */
}
class Session extends Repository {
public function some_func($key, $value) {
/* i can access database object using $this in any class that extends Repository */
$this -> database -> exec (/* sql */);
}
}
/* =================== */
# Load core objects
$R = new Repository :: getInstance();
$R -> loadObject ('config', new Config());
$R -> loadObject ('database', new Database());
$R -> loadObject ('session', new Session());
/* =================== */
Вы можете увидеть какие-либо проблемы или недостатки с таким подходом? Для меня я вижу, возможно, немного больше потребления памяти, потому что каждый следующий класс содержит все больше и больше объектов из репозитория. Прежде, чем у меня была конструкция, в которой каждый класс был независимым, но в любом случае все они требуют базы данных, сессии, конфигурации и т. Д., Я не должен был объявлять их в любом классе. Просто хотел заметить, что я планирую этот проект только для основных объектов, а не для определенных классов.
любая причина, по которой вы собираетесь с супер-интервалом вокруг '->' и '::'? Я никогда не видел, чтобы кто-то писал такой код раньше. По крайней мере для меня это очень запутанно. – nickf
i believ это потому, что я использую шрифт 8px в моем редакторе: D –