2016-08-05 7 views
0

Slim PHPフレームワークで遊んでいて、うまくいかない状況に遭遇しました。Slimの親クラスから継承するオブジェクトを挿入する

まず、私は基本的な設定を説明します:slim-skeletonを使用して

を、私はDICが設定されてdependencies.phpファイルを、持っています。 PDO対象とユーザーオブジェクト - あなたが見ることができるように、私はDICに登録二つの新しいものを持っている、

ので
$container['db'] = function ($c) { 
    return new PDO('mysql:host=localhost;dbname=****', '********', '********'); 
}; 

$container['model.user'] = function ($c) { 
    $db = $c['db']; 
    return new Dash\Models\User($db); 
}; 

:これは、2つの以上のものを使用してデフォルトのスリムスケルトンのセットアップです。

しかし、他のすべてのモデルに対してデータベースオブジェクトを渡すのはちょっと難しいです... モデルと呼ばれる親クラスにPDOオブジェクトを注入したいと思います。

ので、モデルは次のようになります。

class Model 
{ 
    protected $db; 

    public function __construct($db) 
    { 
     $this->db = $db; 
    } 
} 

とユーザーモデル:

class User extends Model 
{ 
    public function getById($id) 
    { 
     $this->db->... // I have access to the database object (PDO) from the parent class. 
    } 
} 

のスリムなコンテナは新しいインスタンスを返すためのものは、私は親オブジェクトを持つことができないということですユーザーです。モデルクラスをインスタンス化しません。

Slimのコンテナをきれいで使いやすい方法で継承する方法はありますか?

ありがとうございます。

+1

あなたのケースで子クラスをインスタンス化するには、基本クラスのコンストラクタが必要です。継承はこのようには機能しません。まだ作成されていないオブジェクトをクラスに拡張します。 –

答えて

1

これは継承の仕組みではありません。 Userであり、インスタンスはModelです。したがって、new User($c['db'])を実行すると正常に動作します。

+0

Ahm、まあ、私は休憩が必要です。あなたはまったく正しい。ありがとう! – brslv