Php 方法“_“可获取”;不存在且未被困在_call()中
这是我控制器中的一个方法:Php 方法“_“可获取”;不存在且未被困在_call()中,php,zend-framework,Php,Zend Framework,这是我控制器中的一个方法: private $_tables = array(); private function _getTable($table) { if (!isset($this->_tables[$table])) { include APPLICATION_PATH . '/modules/' . $this->_request->getModuleName() . '/models/' . $table . '.php
private $_tables = array();
private function _getTable($table)
{
if (!isset($this->_tables[$table])) {
include APPLICATION_PATH . '/modules/'
. $this->_request->getModuleName() . '/models/' . $table . '.php';
$this->_tables[$table] = new $table();
}
return $this->_tables[$table];
}
我在控制器操作中这样使用它:
public function pageAction()
{
$request = $this->getRequest();
$pages = $this->_getTable('Pages');
$p = $pages->getSingle($request->getParam('id'));
// increment number of views in the database
// it only gets incremented when IP is not the same
// as last viewer's IP
$pages->viewIncrement($p->id);
$this->view->headTitle($p->title
. ' - Some cool title');
$this->view->p = $p;
}
在我的PC上进行测试时,它在localhost上非常有效。它在我的旧web主机上也有效,但最近我将我的ZF应用程序移动到了一个新的web主机提供商,在查看某些页面时,我遇到以下错误:
Method "_getTable" does not exist and was not trapped in __call()
只展示了这些,没有别的了。但是有些页面可以工作,有些显示了这个错误,所以我完全迷路了。有什么问题吗
所有必需的PHP扩展都已正确安装和配置,数据库连接工作正常(因为某些页面工作正常)。我真的不知道。如果至少错误更具描述性。尝试将私有状态更改为限制性较小的状态,如公共状态
还要确保所有类都实现相同的控制器。是否确定不起作用的操作正在扩展实现此方法的自定义控制器?在本例中:
class MyController extends Zend_Controller_Action
{
protected functoin _getTable($table)
{
// implementation
}
}
class ProductController extends MyController
{
public function indexAction()
{
$this->_getTable('sometable'); // calls MyController::_getTable
}
}
您的所有控制器都在扩展MyController
正如Nazariy所说,您需要将该方法的可见性访问器设置为protected
或public
private
accessor将不允许您通过扩展类调用此方法
编辑:既然您说要在每个控制器中实现\u getTable
方法,那么您在实现时拼写错误方法名称的可能性有多大?可能类似于\u getTable
(双下划线)或\u getTable
(倒排字母)
我知道这是一件基本的事情,但有时你太专注于问题,看不到共同的解决方案(这经常发生在我身上)
即使不是问题,你也应该考虑创建你的基础控制器并从中扩展,以避免这种代码复制。
你的新主机上使用了什么PHP版本?我不在扩展我自己的类。我只是扩展了Zend_Controller_操作,并在每个控制器中添加了_getTable()方法。正如我已经说过的,这在本地主机和我的旧web主机上都可以正常工作。