我正在尝试使用内置的array_filter
函数过滤数组。根据PHP手册中的示例,我必须提供回调函数的名称。所以,这是我尝试过的:
// This function is a method
public function send($user_id, $access, $content, $aids)
{
// check if user is allowed to see the attachments
function is_owner($var)
{
return $this->attachment_owner($var, $user_id);
}
$aids = implode(';', array_filter(explode(';', $aids), 'is_owner'));
}
这是我得到的错误:
致命错误:当不在文件名行号的对象上下文中时使用$ this。
如何解决这个问题?
答案 0 :(得分:3)
您可以通过使其成为类
的成员来避免使用嵌套函数... inside a class
function is_owner($var)
{
return $this->attachment_owner($var, $user_id);
}
public function send($user_id, $access, $content, $aids)
{
// check if user is allowed to see the attachments
$aids = implode(';', array_filter(explode(';', $aids), array($this, 'is_owner')));
...
参考文献:
Array_filter in the context of an object, with private callback
答案 1 :(得分:2)
因为你正在使用PHP> 5.4.0,您可以创建anonymous function甚至使用 $ this :
public function send($user_id, $access, $content, $aids)
{
// check if user is allowed to see the attachments
$is_owner = function ($var)
{
return $this->attachment_owner($var, $user_id);
}
$aids = implode(';', array_filter(explode(';', $aids), $is_owner));
然而,我会选择蒂姆的解决方案,因为它更清洁。
答案 2 :(得分:1)
一种解决方案是使用匿名函数:
$aids = implode(';', array_filter(explode(';', $aids), function($var) { return $this->attachment_owner($var, $user_id); }));