Я читал в ООП какое-то время, и это меня всегда смущает, но я пытаюсь улучшить свои навыки (хотя я все еще начинаю с этого так, пожалуйста, будь добрым).PHP OOP: Как объединить многоместные классы вместе
Я разрабатываю основное приложение, чей «основной» класс $App
. Я думал, что в любом месте приложения вы можете делать все, начиная с $App
.
Например, у меня есть класс $Db
для запроса базы данных, $Mail
класс для отправки электронной почты и т. Д. Все они автоматически загружаются с использованием spl_autoload_register
.
Мой вопрос заключается в том, чтобы правильно их создать. Вот как я делаю это сейчас:
index.php
require_once('config.php'); // Autoloads classes and some other small stuff
$App = new App;
echo $App->Visitor->getIP();
App.class.php
class App {
public function __construct() {
$this->initialize();
}
private function initialize() {
$this->Visitor = new Visitor($this);
$this->Db = new Db($this);
$this->Mail = new Mail($this);
}
// Then some public methods...
// We are able to use $this->Visitor, $this->Db, etc...
}
Visitor.class.php
class Visitor {
private $App;
public function __construct($App) {
$this->App = $App; // I need access to all of App's methods
}
public function getIP() {
return $_SERVER['REMOTE_ADDR'];
}
}
Так короткий пример выше показывает, как я это делаю во всех своих классах. Класс App
всегда создает экземпляр любого класса, который мы будем использовать во всем приложении в его конструкторе.
«Дети» классы все [зависимые инъекции?] $App
экземпляр, чтобы они могли использовать его методы.
Я делаю это правильно? Это работает, но я не знаю, есть ли более эффективный/более эффективный способ сделать это.
Интересно, что я опубликовал аналогичный вопрос в [Software Engineering] (http://softwareengineering.stackexchange.com/questions/337896/dividing-up-a-large-class-into-tasks-passing- this-when -creating-helper-class). Обратная связь, которую я получил для передачи «этого» вспомогательным классам, чтобы иметь доступ к ее свойствам, не была положительной. – mseifert