#php #database #zend-framework #adapter
#php #База данных #zend-framework #адаптер
Вопрос:
Версия ZF: 1.11.2
Я хочу создать абстрактный класс, который содержит мой адаптер БД. Упрощенно это выглядит так:
<?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. Как бы вы ожидали, что это сработает? Ни в коем случае в вашем примере вы не устанавливаете адаптер БД.
2. getAdapter() — это метод Zend_Db_Table_Abstract. итак, на мой взгляд, я должен получить адаптер по умолчанию или я ошибаюсь?
Ответ №1:
Я немного взглянул на исходный код 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
просто возвращает все, что находится в переменной адаптера БД. Он ничего не делает с значением по умолчанию. Кроме того, поскольку ваш класс переопределяет этот метод, вместо него будет использоваться ваша версия.
Конструктор в Zend_Db_Table_Abstract
классе установит значение по умолчанию, если оно не было предоставлено, поэтому вызов родительского конструктора, как в моем примере, должен гарантировать, что установлен адаптер по умолчанию.
Кроме того, срок службы ZF1 истек. Вы не должны использовать его для новых приложений и должны планировать миграцию для текущих.