2016-10-20 8 views
0

ZFバージョン:1.11.2Zend Framework - Dbアダプタのコンストラクタがnull

私のdbアダプタを保持する抽象クラスを作成したいと思います。簡体字は次のようになります。

<?php 
class Application_Model_DbTable_Abstract extends Zend_Db_Table_Abstract 
{ 
    protected $_dbAdapter = null; 

    /** 
    * @return null 
    */ 
    public function getDbAdapter() 
    { 
     return $this->_dbAdapter; 
    } 

    /** 
    * @param null $dbAdapter 
    */ 
    public function setDbAdapter($dbAdapter) 
    { 
     $this->_dbAdapter = $dbAdapter; 
    } 

    public function __construct() 
    { 
     \Zend_Debug::dump($this->getAdapter(), 'Datei: ' . __FILE__ . '<br/>Zeile: ' . __LINE__, true); die; 
    } 
} 

ただし、ダンプはnullを返します。 Zend_D b_Table_Abstractから拡張された基本モデルクラスでは、同じダンプがZend_Db_Adapter_Pdo_Mysqlオブジェクトを返します。どうして?

+0

これはうまくいくと思いますか?あなたの例では、DBアダプタを設定しません。 –

+0

getAdapter()はZend_Db_Table_Abstractのメソッドです。だから私の意見では、私はデフォルトのアダプタを取得するか、間違っている? – uniqueHxC

答えて

0

メモリをリフレッシュするために、Zend DBのソースコードを少し見てきました。コンストラクタを次のように変更した場合:

public function __construct($config = array()) 
{ 
    parent::__construct($config); 

    \Zend_Debug::dump($this->getAdapter(), 'Datei: ' . __FILE__ . '<br/>Zeile: ' . __LINE__, true); die; 
} 

期待通りに動作するはずです。

getAdapter()メソッドZend_Db_Table_Abstractは、DBアダプタ変数の内容を返すだけです。デフォルトでは何もしません。また、クラスがそのメソッドをオーバーライドするため、代わりにあなたのバージョンが使用されます。

Zend_Db_Table_Abstractクラスのコンストラクタは、提供されていない場合はデフォルトを設定するため、私の例のように親コンストラクタを呼び出すと、デフォルトのアダプタが設定されていることを確認する必要があります。

また、ZF1の寿命が終了しています。新しいアプリケーションには使用しないでください。現在のアプリケーションの移行を計画する必要があります。

+0

作品、ありがとう! :) – uniqueHxC