Zend Framework - 构造函数中的Db适配器为null

时间:2016-10-20 10:49:42

标签: php database zend-framework adapter

ZF版本:1.11.2

我想创建一个抽象类,它保存我的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对象。为什么呢?

1 个答案:

答案 0 :(得分:0)

我只是看看Zend DB源代码只是为了刷新我的记忆。如果您将构造函数更改为:

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

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

它应该更像你期待的工作。

回答评论中的问题:getAdapter()的{​​{1}}方法只返回数据库适配器变量中的任何内容。它对默认值没有任何作用。此外,由于您的类会覆盖该方法,因此将使用您的版本。

Zend_Db_Table_Abstract类中的构造函数将设置默认值(如果未提供),因此在我的示例中调用父构造函数应该确保设置了默认适配器。

此外,ZF1已经过了一段时间。您不应该将它用于新的应用程序,而应该计划迁移当前的应用程序。