在类中使用的PHP回调函数

11

由于某些原因,我们的托管公司使用的是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兼容。或者换一个默认不安全的主机。 - ceejayoz
告诉你的主机提供商,你希望升级 PHP,有时候他们会真的这么做。 - Wesley Murch
他们实际上拒绝了,说:“5.2支持其他客户端更好,因为它比5.3具有“不那么严格的标准”。” - tom91136
4个回答

19

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

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

为了确认,这个已经在PHP 5.2.17下测试通过并且能够工作。


4
尝试使用:
print_r(array_map(array($this, "mapKeyValue") , $arr, $arr2));

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


3
&$this 不会提高性能,在 PHP 的后续版本中,通过调用时间传递引用的方式已被移除。 - nickb

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

0

请确保您的回调方法是公共的

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接