php callback function in class

2019-04-05 00:25发布

for some reasons, our hosting company used PHP 5.2 and doesn't even have mysqli and PDO pre-installed.

I have no choice but to rewrite some part of my code to make it 5.2 compatible.

so, here is my question:

In PHP 5.2 Anonymous function is not supported, so i did the following test to make sure I'm changing the code correctly:

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();

but the above would give me :

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 ....

what is the correct way to do :

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

within a class?

PS: Is it a good enough reason to change hosting company because they use PHP 5.2?(i got a contract with about 7 month left)

4条回答
不美不萌又怎样
2楼-- · 2019-04-05 00:37
array_map(array($this, 'mapKeyValue'), $arr, $arr2);
查看更多
手持菜刀,她持情操
3楼-- · 2019-04-05 00:51

Use $this and an array as the callback:

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

And, just to be sure, this is tested with PHP 5.2.17 and is confirmed working.

查看更多
The star\"
4楼-- · 2019-04-05 00:56

Make sure your that callback method is public.

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

print_r(array_map(array($this, "mapKeyValue") , $arr, $arr2));
查看更多
贪生不怕死
5楼-- · 2019-04-05 00:57

Try using :

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

You need to call the function using $this.

查看更多
登录 后发表回答