array_map()关于回调函数的总结
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()关于回调函数的总结的更多相关文章
- php回调函数的使用
1.array_map — 将回调函数作用到给定数组的单元上 参数:array array_map ( callable $callback , array $arr1 [, array $... ] ...
- array_map 等php回调函数使用问题(关联数组下标获取)
前言:我自己用此类回调函数,来替代 foreach 纯粹是用为代码的简洁性,让代码更好看.(我有点代码小洁癖~) 1.array_reduce 当迭代处理一个一维索引数组时,在回调函数内是无法获取到当 ...
- PHP中的回调函数和匿名函数
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
- array_reduce方法用回调函数迭代地将对数组的值进行操作
在处理php数组的时候,有一种需求特别的频繁,如下二维数组: $arr = array( 1=>array( 'id' => 5, 'name' => '张三' ), 2=>a ...
- is_callable Callbacks / Callables What is a “callable”? 可调用 回调函数
PHP: Callback / Callable 类型 - Manual https://www.php.net/manual/zh/language.types.callable.php Callb ...
- 小兔JS教程(三)-- 彻底攻略JS回调函数
这一讲来谈谈回调函数. 其实一句话就能概括这个东西: 回调函数就是把一个函数当做参数,传入另一个函数中.传进去的目的仅仅是为了在某个时刻去执行它. 如果不执行,那么你传一个函数进去干嘛呢? 就比如说对 ...
- 嵌入式&iOS:回调函数(C)与block(OC)传 参/函数 对比
C的回调函数: callBack.h 1).声明一个doSomeThingCount函数,参数为一个(无返回值,1个int参数的)函数. void DSTCount(void(*CallBack)(i ...
- 嵌入式&iOS:回调函数(C)与block(OC)回调对比
学了OC的block,再写C的回调函数有点别扭,对比下区别,回忆记录下. C的回调函数: callBack.h 1).定义一个回调函数的参数数量.类型. typedef void (*CallBack ...
- 理解 JavaScript 回调函数并使用
JavaScript中,函数是一等(first-class)对象:也就是说,函数是 Object 类型并且可以像其他一等对象(String,Array,Number等)一样使用.它们可以"保 ...
随机推荐
- cuda编程知识普及
本帖经过多方整理,大多来自各路书籍<GPGPU编程技术><cuda高性能> 1 grid 和 block都可以用三元向量来表示: grid的数组元素是block blo ...
- [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 ...
- Java基础笔记(十七)——继承(续)final
final 最终的 修饰类,此类不能被继承.final与访问修饰符public位置随意,在class前即可.public final class A{ } 修饰方法,此方法不能被子类重写,但可以被子 ...
- windows mysql导入sql文件
当需要的sql文件很大时(>200M)怎么办?答:修改my.ini文件,max_allowed_packet的值可以设置为1024M 进入mysql.exe目录下,执行如下命令: mysql - ...
- Maven with Scala
下面是一个在Maven使用Scala的pom.xml <?xml version="1.0" encoding="UTF-8" standalone=&q ...
- node js linux / OS 安装
rm -rf 删除文件夹名字rm -rf 软连接名称 1.安装taryum install -y tar 3. 下载node https://nodejs.org/en/download/ 4. 拷贝 ...
- spark Failed to get database default, returning NoSuchObjectException
解决方法:1)Copy winutils.exe from here(https://github.com/steveloughran/winutils/tree/master/hadoop-2.6. ...
- spring boot mysql 事务
mysql默认 事务自动提交.即:每条insert/update/delete语句,不需要程序手工提交事务,而是mysql自行提交了. 如果我们想实现程序事务提交,需要事先关闭mysql的自动提交事务 ...
- yii2下的路由重写
1.在config/main.php中添加配置信息 文件位置如图所示(图中展示的是backend下的config,也可以在fronted和common的config中添加) 配置的代码标准格式如下 ' ...
- ubuntu 启动 ssh 服务
$ sudo service ssh start $ sudo /etc/init.d/ssh start 重启 $ sudo /etc/init.d/ssh restart $ sudo servi ...