私はOOPで今読んでいますが、いつも混乱していますが、私はスキルを上げようとしています。親切である)。PHP OOP:マルチプルクラスを一緒に束ねる方法
"コア"クラスが$App
のメインアプリを設計しています。私の考えは、どこでもアプリ内で、あなたは$App
の中からすべてを行うことができるということです。例えば
、私はこれらはすべてspl_autoload_register
を使用して自動的にロードされているなど、データベースを照会する$Db
クラス、電子メールを送信するための$Mail
クラスを、持っています。
私の質問は、実際に正しくインスタンス化することです。ここで私は今それをやっている方法は次のとおりです。
の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
インスタンスが[依存関係を挿入する]ため、そのメソッドを使用できます。
これを正しく実行していますか?それは動作しますが、これを行うより効率的な/より良い練習方法があるかどうかわかりません。
興味深いことに、[ソフトウェアエンジニアリング](http://softwareengineering.stackexchange.com/questions/337896/dividing-up-a-large-class-int-tasks-passing-this-when -creating-helper-class)スタックサイト。ヘルパークラスに 'this'を渡してそのプロパティにアクセスできるようにするためのフィードバックは肯定的ではありませんでした。 – mseifert