zoukankan      html  css  js  c++  java
  • array_map()关于回调函数的总结

    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:以上内容是自己的理解,欢迎大家留言补充!!!

  • 相关阅读:
    [转载] Oracle之内存结构(SGA、PGA)
    此生若能得幸福安稳,谁又愿颠沛流离
    隐式转换和显式转换及强制转换的区别
    System.Web.Optimization对脚本和样式表的操作
    js 时间日期函数小结
    jQuery 中bind(),live(),delegate(),on() 区别
    Html.Partial()传值的问题
    js过滤HTML标签以及&nbsp;
    select ROW_NUMBER() over(PARTITION BY InfoType order by NewsID)as rowid from News
    Asp.net单点登录解决方案
  • 原文地址:https://www.cnblogs.com/xsatc5211314/p/7551363.html
Copyright © 2011-2022 走看看