找不到cakephp array_filter回调函数

时间:2012-10-23 21:50:33

标签: php cakephp cakephp-1.3

我有一个cakephp应用程序,在我的一个控制器中,我有一个函数_filter_callback用作回调php函数array_filter(),如下所示:

class TestClassController extends AppController
{
     var $name = 'TestClass';

     ....

     function test_fn()
     {
         ...
         array_filter($my_array, '_filter_callback');
     }

     function _filter_callback($val)
     {
          // callback logic here...
     }
}

我遇到的问题是我的控制器中的_filter_callback无法找到我的函数array_filter,因为我收到以下错误:

Warning: array_filter() expects parameter 2 to be a valid callback, 
function '_filter_callback' not found or invalid function name

有人知道如何让array_filter知道cakephp应用程序中的回调函数吗?

2 个答案:

答案 0 :(得分:5)

该功能是否在全球范围内?如果不是 - 它必须是。 如果函数的主体很简单(在大多数情况下)尝试使用PHP中的匿名函数> 5.3 - http://php.net/manual/en/functions.anonymous.php

或使用create_function

http://php.net/manual/en/function.create-function.php

然后,您可以将此作为参数注入,而不声明一次性全局函数。

过滤小于10的所有元素的示例:

array_filter($array, create_function('$a', 'return $a > 10;'));

编辑: 我现在可以看到你正试图调用该对象的方法。您必须指定实例。试试这个:

array_filter($my_array, array($this, '_filter_callback'));

答案 1 :(得分:0)

有效的PHP回调定义是:

  1. 包含全局函数名称的字符串:'functionName'
  2. 一个数组,其中包含要用作第一个元素的对象的实例,以及一个字符串,其中包含要在此对象内调用的方法的名称作为第二个元素:array($object, 'method')
  3. 带有静态方法调用的字符串:'StaticClass::methodName'
  4. 一个数组,其类名作为字符串作为第一个元素,静态函数名作为第二个元素:array('StaticClass', 'methodName')
  5. lambda函数,内联:function(){ /*do stuff*/ }
  6. 变量中的lambda函数:$lambda
  7. is_callable()可用于检查是否可以调用参数。

    请注意,使用回调取决于可见性。您通常不能使用private或protected方法作为PHP函数的参数。它们从全球角度出发,无法从外部访问这些方法。