array_map()函数的第一个参数可以是匿名函数,系统函数,也可以是自己自定义的函!在全局空间下,这些函数的调用都很简单 在这里就不多说了!我们主要讨论的是该函数调用类中的方法和静态方法的区别
摘录一段php手册的例子简要的说明一下:
1 <?php 2 function cube($n){ 3 return $n * $n * $n; 4 } 5 6 $a = array(1, 2, 3, 4, 5); 7 $b = array_map("cube", $a); 8 print_r($b); 9 ?>
那么,如果你在一个php类中通过array_map()函数回调内部的方法又该如何做呢
同样的 我们在php手册中找到一段用户添加的说明:
If you need to call a static method from array_map, this will NOT work:
(如果你想在array_map函数中回调一个静态方法,那么下面的做法是错误的)
1 <?php 2 $a = array(1, 2, 3, 4, 5); 3 $b = array_map("myclass::myMethoed", $a); 4 print_r($b); 5 ?>
Instead, you need to do this:
(你应该做如下调用)
1 <?php 2 $a = array(1, 2, 3, 4, 5); 3 $b = array_map(array("myclass","myMethoed"), $a); 4 print_r($b); 5 ?>
例如
1 class abc{ 2 3 public function abc1(){ 4 5 //code.... 6 7 } 8 public function abc2(){ 9 $a=array(1,2,3,4,5); 10 array_map(array($this,'abc1'),$a); 11 12 } 13 14 15 }
上文中的$this可以用__CLASS__类的魔术常量代替 我们强烈推荐使用此常量 因为不论你的类如何的修改 都能最终保证结果是正确的
如果是在类的外部调用类的方法呢??
这里分为两种情况:
1.如果在类的外部调用的是类的静态方法:
可以这样的用:
1 <?php 2 class cube{ 3 4 public static function cube1($n){ 5 6 return $n*$n; 7 8 } 9 10 } 11 $a=array(1,2,3,4,5); 12 var_dump(array_map(array('cube','cube1'),$a));
输出的结果为:array(5) { [0]=> int(1) [1]=> int(4) [2]=> int(9) [3]=> int(16) [4]=> int(25) }
我们把static 关键字去掉 会出现什么样的结果呢??
class cube{ public function cube1($n){ return $n*$n; } } $a=array(1,2,3,4,5); var_dump(array_map(array('cube','cube1'),$a));
会被曝这样的错误:Deprecated: array_map() expects parameter 1 to be a valid callback, non-static method cube::cube1() should not be called statically in E:fshceshi2.php on line 12
array(5) { [0]=> int(1) [1]=> int(4) [2]=> int(9) [3]=> int(16) [4]=> int(25) }
由此可知:在类的外面array_map()只能调用静态的方法,那么能不能调用非静态的方法呢 答案是肯定的
1 <?php 2 class cube{ 3 4 public function cube1($n){ 5 6 return $n*$n; 7 8 } 9 10 } 11 $a=array(1,2,3,4,5); 12 var_dump(array_map(array(new cube,'cube1'),$a));
返回的结果:array(5) { [0]=> int(1) [1]=> int(4) [2]=> int(9) [3]=> int(16) [4]=> int(25) }
tip:以上内容是自己的理解,欢迎大家留言补充!!!