php - 帮助 PHP method_exists()

标签 php methods kohana

我正在为我的 ajax Controller 编写一个“包罗万象”的方法。它被称为'ajax':P

这是它目前的样子

public function ajax($method = null) {

    if ( ! $method OR ! request::is_ajax()) {

        return false;

    }


    if (method_exists(array($this, 'searchModel'), $method)) {
        echo $this->searchModel->$method();

    }

    exit;



}

如果不是很明显,我希望 ajax 在它认为不是 Ajax 请求时首先退出,然后检查我的 $this->searchModel查看它是否具有作为 ajax 方法的参数传入的方法。

如果它确实找到了该方法,它应该回显它的返回值然后退出。

我的问题是我无法获得 method_exists()找到方法!我知道它确实存在......我什至硬编码(用于测试目的)我知道肯定存在的方法。

这让我有点发疯,有人能告诉我我做错了什么吗?

谢谢!

附言我正在使用 Kohana 框架,但我认为这并不重要。

更新

您是否认为将我的内部方法名称暴露给 JavaScript(即公共(public))可能存在安全问题?

最佳答案

您正在使用 method_exists() 的第一个参数好像它支持回调参数,但它不接受回调。它只接受一个对象实例或一个类名(一个字符串)来测试静态方法。

试试这个:

if (method_exists($this->searchModel, $method)) {
    echo $this->searchModel->$method();
}

关于你的第二个问题,是的,我认为这是一个安全问题。您没有验证请求是否格式正确。我不会使用您正在设计的“包罗万象”的解决方案。

关于php - 帮助 PHP method_exists(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1424599/

相关文章:

php - 从 MySQL 列数据填充下拉列表

php - 如何获取 SSL 协议(protocol)版本 (php)

c++ - 将参数传递给方法 C++

mysql - 什么是查询偏移量?

javascript - 在 jquery.dataTable 中同时输入两个字段

python - 简单问题 - NoSuchElementException 和 WebDriverException 在此函数中意味着什么?

python - 将方法作为带有可选参数的参数的方法

mysql - 使用 SELECT 时的小写列名

php - 如何在 Kohana PHP 中计算文件下载的内容长度?

PHP MYSQL - 结合 2 个 while 循环