Loading

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:\WAMP\Apache2.4\htdocs\test.php on line 5
    //提示:函数内部无法访问全局变量
?>

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

<?php
    function showInfo(){
        $i=100;//局部变量
        echo $i;
    }
    showInfo();//100
    echo $i;//Notice: Undefined variable: i in E:\WAMP\Apache2.4\htdocs\test.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
?>

 

posted @ 2018-06-10 20:15  澎湃_L  阅读(190)  评论(0编辑  收藏  举报