Php 对非对象调用成员函数describetable()
我尝试了zendframework的一个技巧,我想创建一个自动生成dbTable的类: 以下是我定义的类:Php 对非对象调用成员函数describetable(),php,zend-framework,Php,Zend Framework,我尝试了zendframework的一个技巧,我想创建一个自动生成dbTable的类: 以下是我定义的类: class DbTable extends Zend_Db_Table_Abstract { public $db_table; public function __construct ($model_name='') { //echo "setting database"; $this->db_table = $this->get
class DbTable extends Zend_Db_Table_Abstract {
public $db_table;
public function __construct ($model_name='')
{
//echo "setting database";
$this->db_table = $this->get_db_table($model_name);
}
public function get_db_table($model_name='')
{
if(!empty($model_name))
{
$model = 'Application_Model_DbTable_'.ucfirst($model_name);
if (null === $this->db_table)
{
$this->set_db_table($model);
}
return $this->db_table;
}
else
{
throw new Exception('Database Table was not defined');
}
}
public function set_db_table($dbTable)
{
if (is_string($dbTable)) {
$dbTable = new $dbTable();
}
if (!$dbTable instanceof Zend_Db_Table_Abstract) {
throw new Exception('Invalid table data gateway provided');
}
return $this->db_table = $dbTable;
}
}
当我尝试在上使用它时,例如用户模型,用我定义的函数查找id为的用户:
public function find_by_id($id=0)
{
$DbTable = new DbTable('User');
$result = $database->find($id);
if(empty($result))
{
return false;
}
else
{
$row = $result->current();
$entry = $this->instantiate($row);
return $entry;
}
}
我得到上面提到的错误
有什么帮助吗?无论如何谢谢你 我想你错过了。
试试这个:
替换
$DbTable = new DbTable('User');
$result = $database->find($id);
借
您确定此错误与您的类有关吗?您只需创建新实例,并在constructor中设置它的变量$DbTable。顺便说一句,您应该在constructor中使用set_db_table而不是get_db_table。我看不到与您的类之间的联系,除非您提供更多详细信息,如where is descripbetable Use我认为是的,方法“get_db_table”首先检查是否设置了“$db_table”,如果没有,那么它将通过调用方法“set_db_table”来设置它,我确信descripbetable在类Zend_db_table_Abstrac的find方法中运行,所以基本上在这行$result=$database->find$id;'替换$dbTable=新的$dbTable;两行。仅用于测试,之后,如果正确,请修改此代码:你有var_dump$dbadapter吗?protected'\u pdoType'=>string'mysql'length=5 protected'\u numericDataTypes'=>array size=16 0=>int 0 1=>int 1 2=>int 2'int'=>int 0'INTEGER'=>int 0'MEDIUMINT'=>int 0'SMALLINT'=>int 0'TINYINT'=>int 0'BIGINT'=>int 1'串行'=>int 1'DEC'=>int 2'DECIMAL'=>int 2'DOUBLE'=>int 2'双精度'=>int 2'固定'=>int 2'FLOAT'=>int 2受保护'\u defaultStmtClass'=>string'Zend\u Db\u语句\u Pdo'长度=21I更改答案。抱歉,我必须走了,请随时通知我新的错误消息:意外的'->',我甚至尝试了新的$dbTable->getAdapter;它说:试图得到非对象的属性
$DbTable = new DbTable('User');
$result = $DbTable->db_table->find($id);