zoukankan      html  css  js  c++  java
  • 函数的自定义

    函数:函数的作用就是完成某一特定功能的代码段

    1、自定义函数

      function 函数名称(参数){

        函数体

      }

      注意:

        函数名称最好以动词开头;

        函数名称不区分大小写,调用时保持名称一致;

        函数不支持重载,已定义过的函数不可以再以相同命名重新定义;

        函数名称不能和系统函数重名;

      用于检测函数:

        get_defined_functions():得到系统函数和当前脚本中用户自定义的函数的名称,返回的是二维数组

        function_exists($functionName):检测函数名称是否存在,如果存在,返回为真;不存在返回为假

        func_get_args():获取自定义函数的所有实际参数,返回为数组

        func_get_arg(#):获取某一个实际参数的值

        func_num_args():获取实际参数的个数

        例:

          function sum(){

            //echo func_num_args();

            //echo func_get_arg(0);

            $sum=0;

            for($i=0,$j=func_num_args();$i<$j;$i++){

              $sum+=func_get_arg($i);

            }

            return $sum;

          }

          echo sum(1,10,2,20);

    2、函数的工作原理

      函数声明之后,不调用的情况下不执行;

      调用函数通过函数名称();

    3、封装函数的好处

      代码重用

    4、函数的参数

      自定义函数可以没有参数;如果有参数,分为:必选参数和可选参数

      必选参数在调用的时候一定要传值

      可选参数在调用的时候可以不传值,不传值的情况下就使用默认值,传值的时候使用所传的值

      必选参数一定要在可选参数之前

    5、函数的返回值

      函数可以有返回值也可以没有

      return 值;

      值可以是任意类型

      当函数执行函数体的时候,碰到return就立即结束,或者执行到函数末尾的时候就结束

    6、函数中声明的变量为局部变量,局部变量在函数体内有效,当函数执行完毕之后就被释放了

      函数体外声明的变量是全局变量,但在函数体内想用该全局变量时

        方法一:global $a,$b...;  //定义下变量,声明变量是一个全局变量

        方法二:$GLOBALS["键名"]  --通过下标来取值

        例:

          $i=1;
          $j=1;
          function var_global(){
              global $i;
              echo $i+=1;
              echo "<hr>";
              echo $j;
          }
          var_global();  //$i+=1;会正常输出为2,$j因为未在函数内声明,会报错

      局部变量=动态变量+静态变量

      静态变量:在函数体内通过 static 声明变量为静态变量

        第一次调用的时候去声明,当函数体执行结束后会将这个变量的值保存在静态内存中,当你再次调用的时候,首先会将保存在静态内存中的值取出来再去用

        例:

          function var_static(){
              static $i=1;
              $j=1;
              echo $i+=1;
              echo "<br>";
              echo $j+=1;
              echo "<br>";
          }
          var_static();  //2 2
          var_static();  //3 2
          var_static();  //4 2

    7、递归函数、变量函数、回调函数

      递归函数:函数体自己调用自己本身,用途:在遍历文件目录函数库时用到;

      变量函数:把函数名称赋给一个变量,当调用变量的时候:$变量名称(),PHP引擎在解析这个变量的时候会先把它当作函数来解析,就是一个等量代换的过程;

      回调函数:把函数名称当作参数传给另一个函数,结合变量函数在函数体内去调用这个函数;

    8、函数的传值和传引用

      传值在函数体内对变量操作不会影响变量本身;

      传引用在函数体内对变量操作会影响变量本身,用 &

    如何调用自定义的函数?

      包含自定义函数所在的文件,以便调用该文件中的各函数

        require("目标文档的URL") / require "目标文档的URL"  (目标文档不存在时,报错并终止程序执行

        include("目标文档的URL") / include "目标文档的URL"  (目标文档不存在时,报错并继续执行下面代码)

        require_once("目标文档的URL")

        include_once("目标文档的URL")

        require_once和include_once仅包含一次,若之前已包含就不再包含

      require()/include()/require_once()/include_once() 也可用于在一个页面中调用另一个页面

    嵌套函数调用时报错的问题:

      问题一:

        自定义函数A中嵌套包含了自定义函数B,在函数外直接调用函数B,会报函数B未定义的错;在函数外两次及以上调用函数A,会报重定义的错;

      问题二:  

        若分别在两个自定义函数A、B中调用或又自定义了同名函数C,然后在第三个文件中同时引用了自定义函数A和自定义函数B,因这两个自定义函数中同时存在自定义同名函数C,若在第三个文件中同时调用函数A和函数B,会报重定义的错;

    function A(){
        echo "i'm functionA,";
        function C(){
            echo "i'm functionC";
        }
        echo "A:";
        C();        
    }
    function B(){
        echo "i'm functionB,";
        function C(){
            echo "i'm functionC";
        }
        echo "B:";
        C();
    }
    include "./1.php";
    include "./2.php";
    
    //只调用函数A()或只调用函数B()没问题,但同时调用或连续调用2次函数A就会报重复加载的错
    A();
    A(); B();
    //直接调用函数C()就会报函数未定义的错 C();

      解决方式:

        1.将自定义函数C单独拿出来到第三个文件中定义,与引用的函数A和函数B并列引用,在自定义函数A和自定义函数B中直接调用函数C的函数名

    function A(){
        echo "i'm functionA,";
        
        echo "A:";
        C();        
    }
    function B(){
        echo "i'm functionB,";
        
        echo "B:";
        C();
    }
    include "./1.php";
    include "./2.php";
    
    function C(){
        echo "i'm functionC";
    }
    
    A();
    A();
    B();
    C();

        2.在嵌套函数外利用 function_exists() 函数加一个条件判断即可

    function A(){
        echo "i'm functionA,";
        if(!function_exists("C")){
            function C(){
                echo "i'm functionC";
            }
        }
        echo "A:";
        C();        
    }
    function B(){
        echo "i'm functionB,";
        if(!function_exists("C")){
            function C(){
                echo "i'm functionC";
            }
        }
        echo "B:";
        C();
    }
    include "./1.php";
    include "./2.php";
    
    A();
    A();
    B();
    C();
  • 相关阅读:
    【codecombat】 试玩全攻略 第九关 循环又循环
    【codecombat】 试玩全攻略 第十三关 已知敌人
    【codecombat】 试玩全攻略 第十一关 再次迷宫经历
    【codecombat】 试玩全攻略 第六关 cell commentary
    【codecombat】 试玩全攻略 第八关 火舞
    【codecombat】 试玩全攻略 第十二关 恐惧之门
    【codecombat】 试玩全攻略 第十四关 已知敌人
    苹果apns推送总结
    Xcode 提升速度小技巧
    UITextField 限制输入字数
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/9014826.html
Copyright © 2011-2022 走看看