tom91136
tom91136

Reputation: 8962

php callback function in class

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)

Upvotes: 11

Views: 10378

Answers (4)

Cosmin
Cosmin

Reputation: 1490

Try using :

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

You need to call the function using $this.

Upvotes: 4

Patrick Thach
Patrick Thach

Reputation: 128

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

Upvotes: 0

TheHe
TheHe

Reputation: 2972

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

Upvotes: 0

nickb
nickb

Reputation: 59699

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.

Upvotes: 19

Related Questions