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. luogu2513 逆序对数列

    我们令\(f[i][j]\)表示\(i\)的全排列中,逆序数为\(j\)的个数. 我们考虑在\(i-1\)的排列中插入\(i\).\(k\)是这次更新会导致增加多少逆序数. 则\(\begin{ali ...

  2. Boost lockfree deque 生产者与消费者多对多线程应用

    boost库中有一个boost::lockfree::queue类型的 队列,对于一般的需要队列的程序,其效率都算不错的了,下面使用一个用例来说明. 程序是一个典型的生产者与消费者的关系,都可以使用多 ...

  3. 使用gifplayer操作gif的方法

    使用的工具--gifplayer 基本用法: 1.安装 git clone https://github.com/rubentd/gifplayer.git 2.添加一张gif预览的图片 <im ...

  4. J.U.C-其他组件

    J.U.C-其他组件 FutureTask   介绍Callable时我们知道它可以有返回值,返回值通过Future进行封装.FutrueTask实现了RunnableFuture接口,该接口继承了R ...

  5. Super-Resolution Restoration of MISR Images Using the UCL MAGiGAN System 超分辨率恢复

    作者是伦敦大学学院Mullard空间科学实验室成像组,之前做过对火星图像的分辨率增强. 文章用了许多的图像处理方法获得特征和高分辨率的中间结果,最后用一个生产对抗网络获得更好的高分辨率结果. 用的数据 ...

  6. [Leetcode]016. 3Sum Closest

    public class Solution { public int threeSumClosest(int[] num, int target) { int result = num[0] + nu ...

  7. DP小题集

    P2736 "破锣摇滚"乐队 Raucous Rockers 你刚刚继承了流行的"破锣摇滚"乐队录制的尚未发表的N(1 <= N <= 20)首歌的 ...

  8. SVN更改通知的工具commitmonitor

    SVN更改通知的工具commitmonitor 下载地址: https://sourceforge.net/projects/commitmonitor/files/latest/download 工 ...

  9. 4.centos7 docker 安装

    参考这个文档进行安装docker: http://www.runoob.com/docker/centos-docker-install.html 开机启动 systemctl enable dock ...

  10. vuex 浅认知

    什么是Vuex? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式. 采用了集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 什么情况下我应该使用 ...