我有一个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应用程序中的回调函数吗?
答案 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回调定义是:
'functionName'
array($object, 'method')
'StaticClass::methodName'
array('StaticClass', 'methodName')
function(){ /*do stuff*/ }
$lambda
is_callable()
可用于检查是否可以调用参数。
请注意,使用回调取决于可见性。您通常不能使用private或protected方法作为PHP函数的参数。它们从全球角度出发,无法从外部访问这些方法。