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数组,添加元素的方式来创建全局变量,自然也就类似局部使用全局:

                                     

 

posted @ 2017-08-08 18:29  小油菜1  阅读(770)  评论(0编辑  收藏  举报