php中的函数

来源:互联网 发布:菲尔杰克逊 知乎 编辑:程序博客网 时间:2024/06/09 18:06

                                                     php中的函数

  函数,由于php是弱类型的语言,这不但使得php变量与众不同,同时也使得php函数也变得与众不同。
     在php中函数的声明方式很简单:如下
           function  fcuntion_name([参数列表])
           {
           }   
函数可以分为这么几类:
(1).常规参数函数,就是参数中规中矩。在函数该变参数的值,对原变量无影响。
 
(2).引用参数的函数,即传入的参数是某个参数的引用,在函数中改变参数的值,对原变量的值有影响。但是用unset()函数注销函数中的引用变量
    只是注销了函数中的对应的变量不会注销原变量。如下:
           $t=2;
          function  test(&$m)
           {  
              $m=5
               unset($m)
           }
            test($t);
  echo $t;  //输出5,即改变引用参数的值会改变原变量的值,但是在函数中注销引用参数,只是注销了引用参数指向原变量地址,而不是注销了原变量。
  
(3).默认参数函数,即在函数定义时,就对一些参数进行赋值,默认参数从右向左排列。如
            function  user( $name ,$pwd=123 ,$stu_no='20132577' )
             {  
             }
  在调用时,要是没有对已经有默认值的参数赋值,则使用该参数的默认值。要是在调用时对默认参数赋值了,则覆盖原来的默认值。
  
(4).可变参数个数的函数,即函数的参数在定义时是不定的,在调用函数时,才可以确定参数个数。
    这样的函数需要,使用php系统自带的函数 func_get_args()获得调用函数时,包含输入的所有参数的数组。
或者通过func_num_args()获得调用函数时,输入参数的个数。和配合func_get_arg($index)获得指定位置的输入参数。
定义方式如下:
            function  test()
            {
                 $args=func_get_args(); //一次性获得包含所有的输入参数的数组, 
                for($i=0;$i<$count($args);$i++)
                {
                    ......

                }
            }
或者是通过指定位置,获得相应的参数。
            function  test()
            {
               $length=func_num_args(); //获得输入参数的个数, 
               for($i=0;$i<$length);$i++)
                {
                   $arg=func_get_arg($i);//根据参数索引获得参数值。
                }
             }
 
 (5).变量函数,变量函数其实和可变变量是一样的原理。
     如:定义一个函数 test()
             function  test()
              {
              }
           $t='test';//我们可以称他为变量函数,该变量的值是一个函数名的字符串。$t();//调用函数test()
 
 (6).回调函数,回调函数就是使用变量函数作为参数,实现函数功能的扩展。
   如定义一个user函数和一个identiyt函数如:
            function identiyt()
            {
            }
 
           function user($function_variable)
           {
             $function_variable();//user函数回调函数名为$function_variable的函数。
           }
 
           $function_variable='identiyt';
           user($function_variable);//回调identity函数。
 
 一般我们还可以通过系统函数 call_user_func_array([变量函数],[参数数组])自定义回调函数
           function t()
          {
              echo"t function <be />";
          }
          function y($fun)
          {
             call_user_func_array($fun,array());
             //echo"y function <br />";
           }
          y('t');
        以上使用call_user_func_array()函数,只是调用了全局函数,并不能调用类中的函数,类中静态函数。那类中定义的函数和静态函数如何调用呢?
        类中的函数:以上使用call_user_func_array( array(new class(),function_name) ,array([参数]))
         类中的静态函数: 类中的函数:以上使用call_user_func_array(array(class,function_name),array([参数]))

(7)匿名函数,也叫做闭包函数,与js中的匿名函数是一样的。
         $t=function (){};//将匿名函数赋值给一个变量$t
         $t();//调用匿名函数。

(8)闭包

       闭包可以从父作用域中继承变量。任何此类变量都应该用 use 语言结构传递进去。怎么理解呢?  因为我们知道在函数中定义的变量是局部变量,那么在函数中再定义一个闭包函数(匿名函数),这个闭包函数是无法是直接从他的父函数中继承变量的,因为闭包函数有无法像父函数那样通过global获取全局变量那样来从父函数中获得在父函数中定义的变量,所以闭包函数需要一种新的继承方式,这种方式叫做闭包。关键字为use
      例如:
 function add1()
{
        $a=10;
        $b=20;
        $callback=function() use($a,$b)//通过use 继承父函数中的两个变量,要是不仅想获得变量的值,还想改父函数的变量,
 {                              //通过继承变量的引用如 use(&$a,&$b)
       echo $a+$b;
        };
        $callback();
 }
            add1();
闭包有一个好处,就是通过继承父函数中变量的引用,可以减少循环次数。
 
 

0 0