• PHP基础入门(二)【PHP函数基础】


    PHP基础入门(二)——函数基础

    了解 PHP基础入门详解(一) 后,给大家分享一下PHP的函数基础。

    这部分主要讲的就是: 函数的声明与使用、PHP中变量的作用域、静态变量、函数的参数传递、变量函数、回调函数、匿名函数、include&require、PHP闭包

    PHP的函数基础↓↓↓

    一、函数的声明与使用

    1、标识符:程序中的变量名,属性名,方法名,函数名,类名统称为标识符;
      ① 标识符的命名要求:
        只要是标识符,命名就只有字母、数字、下划线组成,开头不能是数字;
      ② 标识符的命名规范:
        类名:要符合"大驼峰法则",每个单词的首字母全部大写!PersonName
        其他标识符:符合"小驼峰法则"。首字母小写,之后每个单词的首字母大写。 myNameIsHang
        或者使用匈"牙利命名法",所有字母小写,单词之间用下划线分隔。 my_name_is

    2、函数名的要求:
      ① 函数名也是标识符之一。符合标识符的要求与规范。
      ② 函数名不区分大小写。
      ③ 函数名不能与已有函数名重复,不能与内置函数名重复。
      ④ bool类型 function_exists("func") 用于检测函数名是否存在。

    二、PHP中变量的作用域

    1、局部变量:声明在函数内部的变量,称为局部变量,只能在函数内部使用,如果函数外需要使用,需要return关键字将变量返回。
    2、全局变量:声明在函数外面的称为全局变量。
    3、注意:PHP中,全局范围不能访问局部变量;局部范围也不能访问全局变量。
      如果要在函数中使用全局变量,则需要使用 global关键字将全局变量引入。
      函数中如果有变量与全局变量重名,global语句之上,使用局部变量;global语句之下,使用全局变量。
    4、GLOBALS[] 全局数组
      GLOBALS[] 数组,是PHP内置的全局数组。可以直接给数组添加键和值,无论在函数内wai声明,均可在任何地方使用。
        eg:GLOBALS['name']="hanghao";
      即,无论在哪里声明,在任何地方都可以使用GLOBALS['name']
    5、函数中需要使用全局变量,还有一种方式【函数传参】
      可以将全局变量通过函数的参数传入。但是传入的参数是函数的形参,也就是函数内部的局部变量,这个变量与全局变量实际上是两个变量,内部改变,全局变量不会变。
      如果,需要在函数内部改变局部变量,可以将形参声明为取址形式
      function func($a1,$a2){}
      即,函数内修改a1,全局的a1不会改变;函数内修改a2,全局的a2也会改变。
    注意:如果函数声明的形参是取址形式,则调用时必须传入变量,而不能是字面量。
      例如上面的函数调用: func($a1,$a2); √     func($a1,2); x
      因为字面量,不能 中的变量,无法取地址。
    6、PHP中,子函数也无法使用父函数中的变量
      如果子函数要使用父函数的变量,可以将子函数作为变量函数使用,同时配合use关键字将父函数的变量传入子函数。

    function func(){
      $a=10;
      $func=func() use($a){
        echo $a;
      }
    }

    use关键字只能配合变量函数使用,而不能用于function func(){}形式。

     

    三、静态变量

    1、使用scatic关键字声明的变量,成为静态变量。scatic $a=10;
    2、静态变量的特点:
      ① 静态变量在函数加载是进行声明。
      ② 静态变量在函数调用完成后不会被释放。
      ③ 静态变量在整个脚本执行过程中,只会声明一次,脚本执行完成后,释放变量。
      ④同一函数,多次调用,共享同一静态变量。

    四、函数的参数传递

    1、在PHP中如果有参数传递:实参只能比形参多,不能比形参少!!
    2、常规参数传递:function func($a){} func(123);
    3、引用参数传递:function func(&$a){} func($b);
      ①通过&传递进来的是实参的地址,所以函数内部改变形参,外部的实参也会变。
      ②如果形参为引用参数,那么实参必须是变量,而不是字面量。因为字面量没有地址!! func(10); ×
    4、默认参数:function func($b,$a=10){} func(20);
       是$可以不传,默认为10;$b必须传递,否则使用时未定义报错。
      注意:如果参数中默认参数,也有默认参数,则需要把所有的非默认参数放在前面,所有的默认参数放在后面。

    5、可变参数列表:由于PHP实参可以比形参多,那么我们可以传递N个实参,并通过PHP内置函数取到对应参数。
      var_dump(func_get_args());  返回数组格式,取到所有实参列表;
      var_dump(func_num_args());  返回实参列表总个数;count(func_num_args());
      var_dump(func_get_arg(0));  传入index,取到第几个参数 func_get_args()[0];

    五、变量函数

    1、将一个函数名,转为字符串后,赋给一个变量。这个变量,就是我们所说的变量函数,可以加()调用函数内容。

      function func(){}

      $a="func()";  //$a就是变量函数

      $a();

    六、自定义回调函数

    1、使用变量函数,自定义回调函数
      function func($func){$func();}--->function f(){}--->func("f");

    2、使用call_user_func_array和call_user_func自定义回调函数;
      两个函数的第一个参数,均为回调函数,表示执行当前回调。
      不同点在于:call_user_func_array()第二个参数为数组,并将数组的每一个值赋给回调函数的参数列表,相当于JS中的apply();
      而call_user_func,是将回调函数的参数列表,直接展开写到第2~多个参数中,相当于JS中的call();

    call_user_func_array("func",array(1,2,3));
        func(1,2,3);
    call_user_func("func",1,2,3);
        func(1,2,3);

    七、匿名函数

    由于变量函数,存在两种调用方式,(func()  $func();)
    无法保证调用方法的统一,所以,变量的分号一定不能省略。

    $func1 = function(){};

    匿名函数本身也是变量,用var_dump();检测为Object类型

    复制代码
     1 function func(){}
     2    $fun = "func";
     3    $fun();
     4    func();
     5    
     6 $func = function(){
     7        echo "I am ZXX<br />";
     8 };
     9 $func(10);
    10 var_dump($func);
    复制代码

     

    八、include&require

    1、两者的作用:都是用于引入外部的PHP文件到当前文件中。

    2、两者的区别:当引入外部文件出错时,include会产生waring级别的警告,不会影响代码的后续执行;而require会产生error级别的错误,将阻断代码的执行

    3、一般,当用于在文件最上方导入某些文件时,使用require导入,如果导入失败,则不再执行文件;
      而如果是在某些分支条件中,导入执行某些操作,则一般使用include。一旦报错,不影响其他分支功能。

    4、include_once和require_once表示:文件只能导入一次,如果多次调用此函数,则后面的语句会判断文件是否导入。
    再决定是否导入新文件。

    5、include和require可以导入各种类型的文件。
    相当于在当前文件copy了一份,但是copy过程中,PHP引擎会进行适当的编译,确保不会出错。

    6、include和require是函数,也是指令!PHP对于很多常用函数会提供指令的写法。
      eg:echo("11");//函数写法 echo"11";//指令写法

    复制代码
    1 $num = true;
    2    if($num){
    3        include'functionDate.php';
    4            //require "functionDate.php";
    5            func1();
    6        func2();
    7        func3();
    8 }
    9 echo "haha";
    复制代码

    九、PHP闭包

    在PHP中,子函数无法直接访问父函数的局部变量,必须使用User关键词向下传递!!!

    复制代码
     1 $a = 12;
     2 function func1(){
     3    $num = 10;
     4    $num1 = 11;
     5    $func2 = function() use($num,$num1){//使用use关键词传递父函数局部变量
     6        global $a;
     7        var_dump($a);
     8        var_dump($num);
     9        var_dump($num1);
    10    };
    11    return $func2;
    12 }
    13 $f = func1();
    14 $f($num);
    复制代码

    如果参数中既有默认参数,也有非默认参数,那么默认参数列表
    必须要在非默认参数列表后面,即调用的时候必须保证非默认列表的优先赋值。

  • 相关阅读:
    [CareerCup] 4.6 Find Next Node in a BST 寻找二叉搜索树中下一个节点
    Android 接入支付宝支付实现
    Android 设置软键盘搜索键以及监听搜索键点击事件
    Android 应用监听自身卸载,弹出用户反馈调查
    ndk制作so库,ndk-build不是内部或外部命令。。。的错误
    Error: Your project contains C++ files but it is not using a supported native build system
    Android开发之——依赖冲突Program type already present
    基于Python的开源人脸识别库:离线识别率高达99.38%
    Android5.0以后,materialDesign风格的加阴影和裁剪效果
    Android 5.0 以上监听网络变化
  • 原文地址:https://www.cnblogs.com/suitongyu/p/7787997.html
Copyright © 2020-2023  润新知