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个月的合同)

4

4 回答 4

19

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

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

而且,可以肯定的是,这是用 PHP 5.2.17 测试的,并且确认可以正常工作。

于 2012-08-29T13:53:03.387 回答
4

尝试使用:

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

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

于 2012-08-29T13:59:03.140 回答
0
array_map(array($this, 'mapKeyValue'), $arr, $arr2);
于 2012-08-29T13:53:15.343 回答
0

确保您的回调方法是public

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

print_r(array_map(array($this, "mapKeyValue") , $arr, $arr2));
于 2013-08-25T08:47:55.680 回答