我在zend项目中测试模型,我有一个关于如何调用remove()方法的问题?如何调用remove()方法?
这是find方法我测试:
<?
class Admin_Model_Member2 extends Custom_Model_Base {
protected function __construct() {
parent::__construct();
}
static function load($id) {
return self::_selectAndBind(
get_class(),
self::getDefaultAdapter()
->select()
->from('member')
->where('id = ?', array($id)),
true);
}
function remove() {
return $this->delete();
}
}
Admin_Model_Member2延伸Custom_Model_Base,这是Custom_Model_Base,
abstract class Custom_Model_Base {
static public function init($default_adapter = null)
{
if (self::$_db_default === null)
{
if (!is_null($default_adapter))
{
if (!$default_adapter instanceof Zend_Db_Adapter_Abstract)
{
throw new Exception('Provided adapter does not extend Zend_Db_Adapter_Abstract');
}
self::$_db_default = $default_adapter;
}
else if (Zend_Registry::isRegistered('db'))
{
self::$_db_default = Zend_Registry::get('db');
}
else
{
throw new Exception('No default adapter provided for the model layer');
}
}
}
public function delete()
{
$where = array();
foreach($this->_primary as $column)
{
$where[$column] = $this->_data[$column];
}
if ($this->_db->delete($this->_table, $where) != 0)
{
foreach($this->_primary as $column)
{
$this->_data[$column] = null;
}
return true;
}
return false;
}
}
这是测试情况下,我写的,
public function testCanRemove() {
$data = "80176";
Admin_Model_Member2::init();
$this->_model = Admin_Model_Member2::load($data);
$this->assertTrue($this->_model->remove());
}
我想测试remove()方法,所以我加载($ id)一个对象,但是当我调用$ this - > _ mo del-> remove(),它告诉我“调用成员函数delete()在一个非对象”类113 Custom_Model_Base这是“if($ this - > _ db-> delete($ this - > _ table, $ where)!= 0)“,问题是什么以及如何调用remove()方法? Admin_Model_Member2 :: init()不能在Admin_Model_Member2的构造函数中调用,因为构造函数是受保护的。
我已将您的两个帐户合并在一起。 [请阅读有关基于Cookie的帐户的此Faq条目。](http://meta.stackexchange.com/questions/44557/why-should-i-register-my-account/44562/1228) – Will 2011-05-13 15:54:53