zoukankan      html  css  js  c++  java
  • PHP函数

    一、基本概念

    ①函数是模块化程序的产物,在实际开发过程中,将一个项目划分为各个大的功能模块,同时大的功能模块划分为小的功能,再使用函数将这个最小的功能(一个动作)实现。

    ②从代码上看,函数就是使用{ } ,将完成某一功能的代码括起来(封装),再使用function关键字,为这个代码设置一个名字,这个名字就是函数名,函数名后必须有(),这个()表示函数只能被调用。

    二、声明语法

    function funName(形参列表){

      函数体

     【return】值

    }

    三、函数调用:funName(实参列表)

    四、函数名

    ①PHP中函数名是不区分大小写的,但是建议驼峰式命名

    ②函数名的命名规则和变量的命名规则相同,只能包含字母、数字、下划线、而且以字母或者下划线开头

    <?php
        //函数的声明
       function creatTable(){
           $tab="<table border='1' rules='all' width='500' height='300'>";
           for($row=1;$row<=10;$row++){
               $tab.="<tr>";
               for($col=1;$col<=10;$col++){
                   $tab.="<td>数据</td>";
               }
               $tab.="</tr>";
           }
           $tab.="</table>";
           echo $tab;
       }
       //函数的调用
       creatTable();
    ?>

    五、可变函数

    ①概念:如果$a变量的值是另一个函数名,那么可以使用这个变量来访问函数

    <?php
        //函数的声明
       function creatTable(){
           $tab="<table border='1' rules='all' width='500' height='300'>";
           for($row=1;$row<=10;$row++){
               $tab.="<tr>";
               for($col=1;$col<=10;$col++){
                   $tab.="<td>数据</td>";
               }
               $tab.="</tr>";
           }
           $tab.="</table>";
           echo $tab;
       }
       //可变函数
       $func='creatTable';
       $func();
    ?>

    ②使用场景:将收到的数据保存在一个变量中,再用可变变量动态的调用函数

    <?php
        //函数的声明
       function creatTable(){
           $tab="<table border='1' rules='all' width='500' height='300'>";
           for($row=1;$row<=10;$row++){
               $tab.="<tr>";
               for($col=1;$col<=10;$col++){
                   $tab.="<td>数据</td>";
               }
               $tab.="</tr>";
           }
           $tab.="</table>";
           echo $tab;
       }
       //在地址栏中模拟get方式传递数据,将收到的数据保存在一个变量中,再用可变变量动态的调用函数
       $f=$_GET['f'];
       $f();
    ?>

    六、函数的参数

    ①形参:函数定义时的参数就是形参,形参只对内部有效,对外无效,形参是被动的接受数据

    ②实参:函数调用时的参数就是实参,实参主动向函数内部传递实际的数据,形参和实参让函数更具有调用性

    <?php
        function showInfo($i){//形参
            $i=20;
            //内部访问
            echo $i;
        }
        $a=10;
        showInfo($a);//实参--------过程:$a=10-->$i=$a=10----->进入函数$i=20---->输出$i=20
        //尝试访问
        echo $i;
    ?>

    ③形参的默认值:

    • PHP中定义函数时可以为形参赋值一个值,这个值就是形参的默认值,一般具有默认值的形参位于形参列表的最后位置
    <?php
        function showInfo($v1,$v2=100){
           echo $v1+$v2;
        }
        $a=10;
        $b=20;
        showInfo($a);//110
        showInfo($a,$b);//30
    ?>
    • 如有为具有默认值的形参传递数据,那么这个形参使用实际传递过来的数据
    <?php
        function showInfo($v1,$v2){
           $v1=100;
           $v2=200;
           echo $v1,'<br>',$v2,'<br>';
        }
        $a=10;
        $b=20;
        showInfo($a,$b);
        echo $a,'<br>',$b;

    ④引用传值:PHP中可以在形参前加$符号,将实参之间默认的赋值传值,更改为引用传值

    <?php
        function showInfo(&$v1,&$v2){
           $v1=100;
           $v2=200;
           echo $v1,'<br>',$v2,'<br>';
        }
        $a=10;
        $b=20;
        showInfo($a,$b);
        echo $a,'<br>',$b;
    ?>

    七、函数体:完成某一功能的代码段

    八、return语句

    ①在使用函数完成某一些功能时,有时会将函数计算的数据传递出来,此时可以使用return

    ②程序是用于处理数据的,函数所处理的数据具有两个方向,其一从外到内,使用实参和形参,其二,从内到外,使用return

    ③函数内部可以有多个return,只要遇到一个return,就会中断函数的执行,函数内部也可以省略return语句

    九、匿名函数

    ①没有名字的函数就是匿名函数,也称之为闭包函数,如果是匿名函数,必须以分号结尾

    <?php
        function(){
            echo __FUNCTION__;
        };//------必须有分号结尾
    ?>

    ②JavaScript中的函数可以自调用,但是PHP中的函数没有办法自调用

    ③PHP中的匿名函数,可以赋值给另外一个变量

    <?php
        $fn=function(){
            echo __FUNCTION__;
        };
        $fn();//{closure}
    ?>

    ④PHP中的匿名函数还可以用于某个函数的参数,这就是回调函数callback:在实际开发中,使用别人的函数或者系统函数,函数需要传入参数,作为参数传递的函数就是回调函数

    <?php
        function showInfo($fn){
            $fn();
        }
        showInfo(function(){
            echo 'helllo';
        });//helllo
    ?>

    十、伪类型( 是 PHP 文档里用于指示参数可以使用的类型和值)

    ①mixed 说明一个参数可以接受多种不同的(但不一定是所有的)类型。说明函数返回值不是一个确定的类型。

    ②callback 表示回调函数

    ③scalar 如果是int、float、string、bool

    十一、相关函数(系统函数)

    ①func_get_args( ) 用于获取实参,并以数组形式返回

    ②func_get_arg( ind) 用于获取ind小标指定的实参

    ③func_num_args( ) 用于获取实参的个数

    <?php
        function getArg(){
            echo '实参的个数为:',func_num_args(),'<br>';
            echo '第一个实参为:',func_get_arg(0),'<br>';
            echo '<pre>所有的实参如下:';
            print_r(func_get_args());
        }
        getArg(10,20,30);
    ?>

    <?php
        //例:求n个数的和,参数未知----第一种方法
        function getSum(){
            $sum=0;
            $count=func_num_args();
            $arguments=func_get_args();
            for($i=0;$i<$count;$i++){
                $sum+=$arguments[$i];
            }
            return $sum;
        }
        echo getSum(10,20,30,40);//100
    ?>
    <?php
        //例:求n个数的和,参数未知----第二种方法
        function getSum(...$args){
            //print_r ($args);---Array ( [0] => 10 [1] => 20 [2] => 30 [3] => 40 ) 100
            $sum=0;
            for($i=0;$i<count($args);$i++){
                $sum+=$args[$i];
            }
            return $sum;
        }
        echo getSum(10,20,30,40);//100
    ?>

    十二、函数运行的内存原理

    十三、作用域

    ①定义:在PHP中函数是用于封装某一功能的代码段,函数在对代码进行封装会有一些影响,php中分两种作用域,全局作用域和局部作用域

    ②全局作用域和全局变量:在函数外部定义的变量,其作用域就是全局作用域,变量就是全局变量

    <?php
        $i=10;//全局变量
        echo $i;//10
        function showInfo(){
            echo $i;
        }
        showInfo();//Notice: Undefined variable: i in E:WAMPApache2.4htdocs	est.php on line 5
        //提示:函数内部无法访问全局变量
    ?>

    ③局部作用域和局部变量:在函数外部定义的变量,其作用域就是局部作用域,变量就是局部变量

    <?php
        function showInfo(){
            $i=100;//局部变量
            echo $i;
        }
        showInfo();//100
        echo $i;//Notice: Undefined variable: i in E:WAMPApache2.4htdocs	est.php on line 7
        //提示:外部也不能访问局部变量
    ?>

    ④提示:默认PHP中有很清晰的作用域,外部只能访问外部的,内部只能访问内部的,这一点和JavaScript有所不同

    ⑤外部访问内部或者内部访问外部的方法

    • 通过参数的引用传值方式(形参前面加&符号)实现内部的局部变量访问外部的全局变量
    <?php
        $i=10;
        function showInfo(&$p){
            $p=100;
            echo $p,'<br>';
        }
        showInfo($i);//100
        echo $i;//100------原本应该输出的是10,通过引用传值的方法,改变了$i的值
    ?>
    • 通过GLOBALS可以实现内部的局部变量访问外部的全局变量

     

    <?php
        //通过$GLOBALS可以实现内部访问外部的全局变量
        $name="Eric";
        $age=20;
        function showInfo(){
            echo $GLOBALS['name'],'<br>';
            echo $GLOBALS['age'],'<br>';
        }
        showInfo();//Eric  20
    ?>
    • global关键字方法可以实现内外互访,语法是global变量名,在函数内部建立一个与函数外部同名的变量引用,如果外部没有这样的同名变量,会在外部创建一个同名的变量
    <?php
        //global实现内部访问外部
        $name="Eric";
        function showName(){
           global $name;
           echo $name,'<br>';
        }
        showName();//Eric
        echo $name;//Eric
        //global实现外部访问内部
        function showAge(){
            global $age;
            $age=20;
            echo $age,'<br>';
        }
        showAge();//20
        echo $age;//20
    ?>

    ⑥常量的作用域:常量没有作用域的限制,一个脚本的常量,在任何的位置都就可以访问

    ⑦预定义变量(超全局变量):不受作用域的限制

    十四、变量的生命周期

    ①作用域与生命周期:作用域表示的是一个变量的作用空间范围,生命周期表示的是一个变量的作用时间范围

    ②全局变量的生命周期:从脚本执行开始开始到脚本执行结束

    ③局部变量的生命周期:从函数执行开始到函数执行结束

    十五、静态变量

    ①定义:在函数内部使用,static声明的变量

    <?php
        function showInfo(){
            static $i=1;
            $i++;
            echo $i,'<br>';
        }
        showInfo();//2
        showInfo();//3
        showInfo();//4
        showInfo();//5
    ?>

    ②原理:静态变量在函数多次被调用同时只会被初始化一次,并且静态变量的值不会随着函数的执行而被回收

    ③提示:静态变量的使用场景,如果想在同一个函数多次调用时,共享一份数据

    十六、日期时间函数

    ①time()用于获取当前时间戳,单位秒,从1970年1月1日0时0分0秒开始算起

    ②microtime()单位,毫秒

    <?php
        echo time(), '<br>';//1528703394
        echo microtime();//0.43992100 1528703394
    ?>

    ③date()用于格式化时间信息

    <?php
        echo date('y-m-d H:i:s');//18-06-11 15:53:04
        //语法:date(format【,time】)
        //time表示所要格式化的时间戳,如果省略表示对当前时间进行格式化
        //format表示用于格式化时间的字符串
        //y--------表示4位得年份
        //m--------表示月份,有前导0
        //d--------表示日期
        //H--------表示24小时机制的小时数
        //i--------表示分钟数
        //s--------表示秒数
    ?>

    ④mktime(时,分,秒,月,日,年),返回日期的 UNIX 时间戳。

    <?php
        $time=mktime(18,59,59,6,6,2018);
        echo date('y-m-d H:i:s',$time);//18-06-06 18:59:59
    ?>

    ⑤strtotime()函数将任何英文文本的日期或时间描述解析为 Unix 时间戳

    <?php
        echo date('y-m-d H:i:s',strtotime("now")),'<br>';//18-06-11 16:10:18
        echo date('y-m-d H:i:s',strtotime("10 September 2016")),'<br>';//16-09-10 00:00:00
        echo date('y-m-d H:i:s',strtotime("+1 day")),'<br>';//18-06-12 16:10:18
        echo date('y-m-d H:i:s',strtotime("+1 week")),'<br>';// 18-06-18 16:10:18
        echo date('y-m-d H:i:s',strtotime("+1 week 2day 4 hours 2 seconds")),'<br>';// 18-06-20 20:10:20
        echo date('y-m-d H:i:s',strtotime("next Thursday")),'<br>';// 18-06-14 00:00:00
        echo date('y-m-d H:i:s',strtotime("last Monday")),'<br>';//18-06-04 00:00:00
    ?>

    ⑥时区的设置

    ⑦扩展知识点:

    十七、递归

    ①函数自己调用自己

    ②特点:完成一个需求有多个步骤,但完成每一步所实现的代码是相似的,只有函数所传递的参数不同而已

    <?php
        //斐波那契数列:1 2 3 5 8 ...
        function func($pos){
            if($pos==1){
                return 1;
            }else if($pos==2){
                return 2;
            }else{
                return func($pos-1)+func($pos-2);
            }
        }
        echo func(6);//13
        echo func(10);//89
        echo func(12);//233
    ?>
  • 相关阅读:
    Java hello/hi的简单的网络聊天程序
    案例分析:设计模式与代码的结构特性
    网络相关的命令工具研究报告
    如何提高程序员的键盘使用效率
    分析一套源代码的代码规范和风格并讨论如何改进优化代码
    用例建模Use Case Modeling
    结合工程实践选题调研分析同类软件产品
    领域建模
    SecureCRT 连接虚拟机Linux
    用css固定div层在页面顶部和底部(兼容IE6)
  • 原文地址:https://www.cnblogs.com/EricZLin/p/9164219.html
Copyright © 2011-2022 走看看