php callback function in class

匿名 (未验证) 提交于 2019-12-03 08:36:05

问题:

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


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