Php 如何将对象方法用作回调函数

Php 如何将对象方法用作回调函数,php,Php,我在一个单例类中有下面的方法 private function encode($inp) { if (is_array($inp) { return array_map('$this->encode', $inp); } else if is_scalar($inp) { return str_replace('%7E', rawurlencode($inp)); } else { return ''; } }

我在一个单例类中有下面的方法

private function encode($inp)
{
    if (is_array($inp) {
        return array_map('$this->encode', $inp);
    } else if is_scalar($inp) {
        return str_replace('%7E', rawurlencode($inp));
    } else {
        return '';
    }
}
这是一个正常的函数

function encode($inp)
{
    if (is_array($inp) {
        return array_map('encode', $inp);
    } else if is_scalar($inp) {
        return str_replace('%7E', rawurlencode($inp));
    } else {
        return '';
    }
}
在类内使用时,我会遇到以下错误:

PHP警告:array_map():第一个 参数“$this->rfc_encode”应该 必须为NULL或有效回调

请任何人帮我解决这个问题。

来自:

实例化对象的方法作为数组传递,数组包含索引0处的对象和索引1处的方法名称

所以试试看

return array_map(array($this, 'encode'), $inp);

$this->encode中释放单个代码

> private function encode($inp) {
>     if (is_array($inp) {
>         return array_map($this->encode, $inp);
>     } else if is_scalar($inp) {
>         return str_replace('%7E', rawurlencode($inp));
>     } else {
>         return '';
>     } }

希望这能解决问题。

$this->encode
没有任何价值。PHP中没有真正的函数指针,因此这对于回调来说不是有效的PHP。只有当您有类似于
$this->encode=array(&$this,'encode')的东西时,它才会工作
,这只是一个使这个特定代码工作的黑客。非常感谢你的帮助Chao和Fero。另外,方法
encode
必须是。@dev实际上,我已经用一个私有类方法对它进行了测试,它也可以工作。我使用的是PHP7.0.13。如果自定义函数需要2params@MuhammadOmerAslam对于数组_映射,参数列表是可变的