类中的php回调函数

Posted

技术标签:

【中文标题】类中的php回调函数【英文标题】:php callback function in class 【发布时间】:2012-08-24 03:48:43 【问题描述】:

由于某些原因,我们的托管公司使用 php 5.2,甚至没有预装 mysqli 和 PDO。

我别无选择,只能重写部分代码以使其与 5.2 兼容。

所以,这是我的问题:

在 PHP 5.2 中不支持匿名函数,因此我进行了以下测试以确保我正确更改了代码:

class foo

    public function toString()
        $arr = array("a", "b");
        $arr2 = array("c", "d");
        print_r(array_map('mapKeyValue', $arr, $arr2));
    

    private function mapKeyValue($v, $k)
        return $k."='".$v."'";
    


$foo = new foo();
echo $foo->toString();

但上面会给我:

Warning: array_map() expects parameter 1 to be a valid callback, function 'mapKeyValue' not found or invalid function name in ....
PHP Warning: array_map() expects parameter 1 to be a valid callback, function 'mapKeyValue' not found or invalid function name in ....

正确的做法是什么:

array_map('mapKeyValue', $arr, $arr2);

在一个班级内?

PS:因为他们使用 PHP 5.2 而更换托管公司是否是一个足够好的理由?(我得到了大约 7 个月的合同)

【问题讨论】:

“我别无选择,只能重写部分代码以使其与 5.2 兼容。”或者获取一个默认不安全的新主机。 告诉您的主机您想要升级 PHP,有时他们会这样做。 他们实际上拒绝说:'5.2 更好地支持其他客户端,因为它的“标准不那么严格”比 5.3' 【参考方案1】:

尝试使用:

print_r(array_map(array($this, "mapKeyValue") , $arr, $arr2));

您需要使用 $this 调用该函数。

【讨论】:

&$this 不会提高性能,并且在更高版本的 PHP 调用时传递引用已被删除。【参考方案2】:

确保您的回调方法是public

public function mapKeyValue($v, $k)
    return $k."='".$v."'";


print_r(array_map(array($this, "mapKeyValue") , $arr, $arr2));

【讨论】:

【参考方案3】:
array_map(array($this, 'mapKeyValue'), $arr, $arr2);

【讨论】:

【参考方案4】:

使用$this 和一个数组作为回调:

array_map( array( $this, 'mapKeyValue'), $arr, $arr2);

而且,为了确定,这是tested with PHP 5.2.17 并且已确认有效。

【讨论】:

以上是关于类中的php回调函数的主要内容,如果未能解决你的问题,请参考以下文章

运行回调时无法访问 JS 类中的函数

类中 dll 的回调函数

PCL中将回调函数封装到类中

JAVA回调函数讲解

PHP 中的回调函数

php中的回调函数