zoukankan      html  css  js  c++  java
  • 18)PHP,可变函数,匿名函数 变量的作用域

    (1)可变函数:

          可变函数,就是函数名“可变”——其实跟可变变量一样的道理。

    $str1 = “f1”;   //只是一个字符串,内容为”f1”

    $v1 = $str1(3, 4);   //形式上看起来是一个变量后面加上括号,则其本质是该变量的“内容”(f1)后面加括号,即这里是调用函数f1(3, 4);

                      

    (2)匿名函数

          匿名函数就是没有名字的函数,其有两种表现形式:

          表现1

              $f1 =  function(){。。。函数体;};  

                    //这里的匿名函数定义形式上没有名字,但其实又将之赋值给了变量$f1

               使用时,就跟“可变函数”一样了:$v1 = $f1();

                                 

         表现形式2

            调用其他函数2(匿名函数,实参1,实参2, ...... );

            说明:

                1此形式的匿名函数只有定义的函数体(无函数名)

                2此形式的匿名函数只能作为其他函数调用时的参数(其他函数通常有特定用处)

                3此匿名函数会在调用其他函数的“过程中”被执行。

                      能够使用(匿名)函数当作实参的函数,并不多!

                 其中有一个常见的是:call_user_func_array();

                其使用形式为:

                      call_user_func_array(匿名函数,数组);

                含义:

                      将数组的每一项当作该匿名函数的若干个实参,传递到该匿名函数中,并执行该匿名函数,并可以从该匿名函数中返回数据。

                                                              

                                                              

    (3)变量的作用域

                通常说作用域,有2个:

              局部作用域:只能在所定义的函数范围内使用。

              全局作用域:在函数的“外部”范围使用。

                      ——php中,局部和全局作用域是不重叠的

                      ——js中,全局作用域是包括局部作用域的

        但还有两个:

                  超全局:就是在函数的内部和外部都可以使用。

                  超全局变量只有系统内部预定义的那几个,我们不能再程序中创建超全局变量。

                  静态局部作用域:其实也是局部,但多一个特征:数据能够在函数退出后仍然保持不丢失。

                                                    

                                                       

    (5)局部访问全局变量

        1,在局部范围内,使用global关键字对全局变量进行一次“声明”,则就可以使用了:

            语法:global  $变量名;

                                               

            说明:

                1,实际上,函数中的global 语句,其实是创建了一个跟外部变量同名的局部变量,并通过“引用”的方式指向了外部变量的数据区

                                                         

                                                            

            

          2,在函数中(局部范围),使用$GLOBALS超全局数组来引用(使用)全局变量:

              $GLOBALS超全局数组的作用是用于存储所有全局变量的数据:变量名为下标,变量值为对应元素值。

               

            

              但通过 $GLOBALS操作全局变量,是直接操作(而不是引用操作),即如果unset该对应元素,则全局变量对应变量也被unset:

                

     

          3,实际上,我们还可以在函数内部直接使用$GLOBALS数组,添加元素的方式来创建全局变量,自然也就类似局部使用全局:

                                         

  • 相关阅读:
    MS CRM 2011的自定义和开发(11)——插件(plugin)开发(四)
    MS CRM 2011的自定义和开发(11)——插件(plugin)开发(一)
    MSCRM Plugin Debug
    MS CRM 2011的自定义和开发(11)——插件(plugin)开发(二)
    [转].net 使用NPOI或MyXls把DataTable导出到Excel
    HTML5的十大新特性
    语义化的HTML及其目的
    XHTML和HTML有什么区别
    浏览器根对象document之方法概述
    浏览器根对象document之数值和布尔属性
  • 原文地址:https://www.cnblogs.com/xiaoyoucai/p/7308353.html
Copyright © 2011-2022 走看看