php callback function in class

假装没事ソ 提交于 2019-12-09 15:08:35

问题


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)


回答1:


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.




回答2:


Try using :

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

You need to call the function using $this.




回答3:


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



回答4:


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


来源:https://stackoverflow.com/questions/12179552/php-callback-function-in-class

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!