由于某些原因,我们的托管公司使用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个月左右就签了合同)
答案 0 :(得分:19)
使用$this
和数组作为回调:
array_map( array( $this, 'mapKeyValue'), $arr, $arr2);
而且,为了确定,这是tested with PHP 5.2.17并确认有效。
答案 1 :(得分:4)
尝试使用:
print_r(array_map(array($this, "mapKeyValue") , $arr, $arr2));
您需要使用$ this调用该函数。
答案 2 :(得分:0)
array_map(array($this, 'mapKeyValue'), $arr, $arr2);
答案 3 :(得分:0)
确保您的回调方法公开。
public function mapKeyValue($v, $k){
return $k."='".$v."'";
}
print_r(array_map(array($this, "mapKeyValue") , $arr, $arr2));