Php 对非对象调用成员函数describetable()

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

我尝试了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_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);