array_map()函数的第一个参数可以是匿名函数,系统函数,也可以是自己自定义的函!在全局空间下,这些函数的调用都很简单 在这里就不多说了!我们主要讨论的是该函数调用类中的方法和静态方法的区别

摘录一段php手册的例子简要的说明一下:

 <?php
function cube($n){
return $n * $n * $n;
} $a = array(1, 2, 3, 4, 5);
$b = array_map("cube", $a);
print_r($b);
?>

那么,如果你在一个php类中通过array_map()函数回调内部的方法又该如何做呢

同样的 我们在php手册中找到一段用户添加的说明:

If you need to call a static method from array_map, this will NOT work:
(如果你想在array_map函数中回调一个静态方法,那么下面的做法是错误的)

 <?php
$a = array(1, 2, 3, 4, 5);
$b = array_map("myclass::myMethoed", $a);
print_r($b);
?>

Instead, you need to do this:
(你应该做如下调用)

 <?php
$a = array(1, 2, 3, 4, 5);
$b = array_map(array("myclass","myMethoed"), $a);
print_r($b);
?>

例如

  class abc{

   public function abc1(){

   //code....

 }
public function abc2(){
$a=array(1,2,3,4,5);
array_map(array($this,'abc1'),$a); } }

上文中的$this可以用__CLASS__类的魔术常量代替  我们强烈推荐使用此常量  因为不论你的类如何的修改 都能最终保证结果是正确的

如果是在类的外部调用类的方法呢??

这里分为两种情况:

1.如果在类的外部调用的是类的静态方法:

可以这样的用:

 <?php
class cube{ public static function cube1($n){ return $n*$n; } }
$a=array(1,2,3,4,5);
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:\fsh\ceshi2.php on line 12
array(5) { [0]=> int(1) [1]=> int(4) [2]=> int(9) [3]=> int(16) [4]=> int(25) }

由此可知:在类的外面array_map()只能调用静态的方法,那么能不能调用非静态的方法呢  答案是肯定的

 <?php
class cube{ public function cube1($n){ return $n*$n; } }
$a=array(1,2,3,4,5);
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:以上内容是自己的理解,欢迎大家留言补充!!!

array_map()关于回调函数的总结的更多相关文章

  1. php回调函数的使用

    1.array_map — 将回调函数作用到给定数组的单元上 参数:array array_map ( callable $callback , array $arr1 [, array $... ] ...

  2. array_map 等php回调函数使用问题(关联数组下标获取)

    前言:我自己用此类回调函数,来替代 foreach 纯粹是用为代码的简洁性,让代码更好看.(我有点代码小洁癖~) 1.array_reduce 当迭代处理一个一维索引数组时,在回调函数内是无法获取到当 ...

  3. PHP中的回调函数和匿名函数

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  4. array_reduce方法用回调函数迭代地将对数组的值进行操作

    在处理php数组的时候,有一种需求特别的频繁,如下二维数组: $arr = array( 1=>array( 'id' => 5, 'name' => '张三' ), 2=>a ...

  5. is_callable Callbacks / Callables What is a “callable”? 可调用 回调函数

    PHP: Callback / Callable 类型 - Manual https://www.php.net/manual/zh/language.types.callable.php Callb ...

  6. 小兔JS教程(三)-- 彻底攻略JS回调函数

    这一讲来谈谈回调函数. 其实一句话就能概括这个东西: 回调函数就是把一个函数当做参数,传入另一个函数中.传进去的目的仅仅是为了在某个时刻去执行它. 如果不执行,那么你传一个函数进去干嘛呢? 就比如说对 ...

  7. 嵌入式&iOS:回调函数(C)与block(OC)传 参/函数 对比

    C的回调函数: callBack.h 1).声明一个doSomeThingCount函数,参数为一个(无返回值,1个int参数的)函数. void DSTCount(void(*CallBack)(i ...

  8. 嵌入式&iOS:回调函数(C)与block(OC)回调对比

    学了OC的block,再写C的回调函数有点别扭,对比下区别,回忆记录下. C的回调函数: callBack.h 1).定义一个回调函数的参数数量.类型. typedef void (*CallBack ...

  9. 理解 JavaScript 回调函数并使用

    JavaScript中,函数是一等(first-class)对象:也就是说,函数是 Object 类型并且可以像其他一等对象(String,Array,Number等)一样使用.它们可以"保 ...

随机推荐

  1. cuda编程知识普及

    本帖经过多方整理,大多来自各路书籍<GPGPU编程技术><cuda高性能>   1 grid 和 block都可以用三元向量来表示:   grid的数组元素是block blo ...

  2. [USACO08OPEN]农场周围的道路Roads Around The Farm BZOJ 1621 DFS

    Farmer John's cows have taken an interest in exploring the territory around the farm. Initially, all ...

  3. Java基础笔记(十七)——继承(续)final

    final  最终的 修饰类,此类不能被继承.final与访问修饰符public位置随意,在class前即可.public final class A{ } 修饰方法,此方法不能被子类重写,但可以被子 ...

  4. windows mysql导入sql文件

    当需要的sql文件很大时(>200M)怎么办?答:修改my.ini文件,max_allowed_packet的值可以设置为1024M 进入mysql.exe目录下,执行如下命令: mysql - ...

  5. Maven with Scala

    下面是一个在Maven使用Scala的pom.xml <?xml version="1.0" encoding="UTF-8" standalone=&q ...

  6. node js linux / OS 安装

    rm -rf 删除文件夹名字rm -rf 软连接名称 1.安装taryum install -y tar 3. 下载node https://nodejs.org/en/download/ 4. 拷贝 ...

  7. spark Failed to get database default, returning NoSuchObjectException

    解决方法:1)Copy winutils.exe from here(https://github.com/steveloughran/winutils/tree/master/hadoop-2.6. ...

  8. spring boot mysql 事务

    mysql默认 事务自动提交.即:每条insert/update/delete语句,不需要程序手工提交事务,而是mysql自行提交了. 如果我们想实现程序事务提交,需要事先关闭mysql的自动提交事务 ...

  9. yii2下的路由重写

    1.在config/main.php中添加配置信息 文件位置如图所示(图中展示的是backend下的config,也可以在fronted和common的config中添加) 配置的代码标准格式如下 ' ...

  10. ubuntu 启动 ssh 服务

    $ sudo service ssh start $ sudo /etc/init.d/ssh start 重启 $ sudo /etc/init.d/ssh restart $ sudo servi ...