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();
  • 相关阅读:
    往excel中插入分组柱状图
    往excel中插入柱状图b
    向excel中插入柱状图a
    对excel进行数据筛选及过滤
    对excel进行排序及多重排序
    函数填充,计算列
    ChinaCock界面控件介绍-TCCImageViewerForm
    Allocation-Free Collections
    Delphi 10.3实现Android App的动态权限申请
    DeployMan,发布文件的利器
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/9014826.html
Copyright © 2011-2022 走看看