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主机上都可以正常工作。