设为首页 收藏本站
查看: 687|回复: 0

[经验分享] PHP函数介绍

[复制链接]

尚未签到

发表于 2018-12-18 07:14:15 | 显示全部楼层 |阅读模式
  PHP函数介绍
  

  基本使用:
  

  函数定义形式:
          function 函数名(形参1,形参2,...) {
              //函数体(代码块);

          }

      函数调用形式:

          本质上就是使用一个名字来达到执行其中函数中的的作用。通常可以分两种情形的调用:

          第一种:没有返回值的函数,则调用语句是独立语句

              函数名(实参1,实参2,...); //实参个数应该跟形参有匹配性

  

          第二种:有返回值的函数,则调用语句,通常会“混杂”在别的语句中,并将该调用语句当作一个“数据”来使用:

              A: $v1 = 函数名(); //赋值给其它变量,这里省略实参语法,下同

              B: $v1 = 函数名()*3+6; //参与运算,然后再赋值

              C: echo 函数名(); //直接输出
              D: echo 函数名()*3+6; //参与运算,然后再输出
              E: $v1 = 函数名2(函数名(),实参2,实参3,...); //当作实参使用

  

  函数调用流程分析:

      开始调用:实际参数传数据给形式参数

      程序执行流程进入到函数中(一个独立的运行空间),跟全局执行空间是隔离的

      按常规的程序逻辑执行函数中的代码

      如果碰到return语句,则终止函数的执行,跳回函数开始调用的位置

      如果执行到函数的最后位置,也同样跳回函数开始调用的位置

  其运行流程原理图如下:

  函数参数问题:

      一个函数,
      在定义时,有形式参数(形参:parameter)
          1:形参一定是一个变量名,
          2:该变量名只能是在该函数中有效的变量名,
          3:而且只在该函数调用并执行时有效,函数结束,通常这些变量也就“销毁”
      在调用时有实际参数(实参:argument)

          实参就是一个“实际数据”,该数据可以是一个“直接数据”(比如5,"abc"),也可以是一个变量中存储的数据。

          实参的作用是将其数据”赋值给“形参变量

          实参跟形参之间通常应该有个“一一对应”关系

  

      默认值参数:

          定义一个函数的时候,在形式参数的位置,可以给形式参数设定默认值,此时就可以称为默认值参数。比如:


     
  注意:
      默认值不能是对象或资源类型

      默认值只能是常量表达式,或常量,不能是变量

  即:如下语法是正确的:function f1($v = 3) {}, function f1($v = __LINE__) {},
      如下语法是错误的:function f1($v = 3+1) {} , $m = 3,function f1($v = $m) {},

  

  函数的参数传值问题:
      实际上,函数的参数传值问题,跟变量之间的传值是一样的规则(模式):默认是值传递。

      如果实参本身就是“直接数据”,则不存在传值问题,而是简单的“赋值”

      传值问题只发生在实参是变量的情形:

     
      我们也可以让某个参数(形参)以引用传递的方式来传值:
      引用传递的形参(实参),在函数内部改变其值,在函数外面的实参,也会相应做修改

     
      注意:如果某个形参设定为引用传递,此时,实参只能使用变量,否则会出现语法错误,如:

     
  

  参数的数量问题:
  1:函数的参数的数量可以是0个或多个 -- 具体多少个,不是语法问题,而是应用问题
      2:通常,实际参数的数量应该跟形式参数的数量一致
      3:但是,在第二条的基础上,如果形式参数中有默认值,则实际参数的对应项可以少省略   

          即:实参的个数,至少应该不少于形参中的非默认值参数的个数

  

  但:我们还有一种特殊的处理函数参数的用法:自由参数数量
      定义时可以不给定形参,但调用时,却又可以给定任何个数的实参

  在系统中,var_dump()这个函数也有同样的使用效果:

      $var_dump($v1);

      var_dum($v1,$v2,$v3);  //这样也是可以的

  这种应用的实现,是依赖于系统中的3个系统函数来达到的:
      func_get_args();    //获得一个函数的接收到的所有实参数据,并结果是一个数组

      func_get_arg(n);    //获得一个函数所接收到的第n个实参数据(n从0开始)

      func_num_args();    //获得一个函数所接收到的所有实参数据个数

  

  函数的返回值:

      通常来说,一个函数中使用reture语句,并其后带一个数据(直接数据,变量数据,表达式结果数据)则该函数就会返回该数据到“调用的位置":

     
      通常情况下,函数返回的数据都是以”值传递“的形式返回,函数中的变量的值”拷贝“一份,然后返回给接收的位置的相应代码(赋值,输出,计算)。

      但我们也可以让函数中的变量的数据的值,以”引用传递“的方式返回,形式如下:

          定义函数:

              function $函数名(parameter1,parameter2,...) { //函数名前有个引用符号
                  $result = 0; //初始化

                  ......

                  return $result; //此时返回数据,只能是变量

              }

          调用函数:

              $v1 = $函数名(argument1,argument2,...); //引用返回的函数,自然是指有返回值

     
  

  函数的其他形式:
      1:可变函数 -- 就是函数名“可变”,其实跟可变变量一样道理

          $str1 = "f1"; //只是一个字符串,内容为"f1"

          $v1 = $str1(3,4); //形式上看起来是一个变量后面加上括号,则其本质是该变量的“内容”(f1)后面加括号,即这里是调用函数f1(3,4)。实际应用中,常常是需要根据“用户给定”的数据,来决定调用哪个函数,比如:

          function jpg() {处理jpg图};

          function png() {处理png图};

          function gif() {处理gif图};

          $fileName = get_fileName() {获取用户上传的图片名};

          $houzhui = get_houzhui($fileName);

          $houzhui();

      2:匿名函数 -- 就是没有名字的函数,其有两种表现形式:

          表现形式1:

              $f1 = function() {...函数体;}; //这里的匿名函数定义形式上没有名字,但其实又将之赋值给了变量$f1;使用时,就跟“可变函数”一样了:$v1 = $f1();

     
          表现形式2:

              调用其他函数(匿名函数,argument1,argument2,...);

              说明:
                  1:此形式的匿名函数只有定义的函数体(无函数名)
                  2:此形式的匿名函数只能作为其他函数调用时的参数(其他函数通常有特定用处)

                  3:此匿名函数会在调用其他函数的“过程中”被执行。

              能够使用(匿名)函数当作实参的函数,并不多!

              其中有一个常见的是:call_user_func_array();

              其使用形式为:

                  call_user_func_array(匿名函数,数组);

              含义:将数组当作匿名函数的若干个实参,传递到该匿名函数中,并可以从该匿名函数中返回数据,执行该匿名函数。
          

     
  变量的作用域:
      通常说作用域,有2个:

          局部作用域:只能在所定义的函数范围内使用

          全局作用域:在函数的“外部”范围使用

              -- php中,局部和全局作用域是不重叠的。

              -- js中,全局作用域是包括局部作用域的。





      但还有两个:

          超全局:就是函数的内部与外部都可以使用。

                  超全局变量只有系统内部预定义的那几个,我们不能在程序中创建超全局变量

  

          静态局部作用域:其实也是局部,但多一个特征:数据能够在函数退出后仍然保持不丢失。
  

  局部访问全局变量的特定语法:
      1:在局部范围内使用 global 关键字对全局变量进行一次“声明”,则就可以使用了

          
          说明:

              1:实际上,函数中的 global 语句,其实是创建了一个跟外部变量同名的局部变量,并通过“引用”的方式指向了外部变量的数据区

        
              实例:

       
             2:在函数中(局部范围),使用$GLOBALS超全局数组来引用(使用)全局变量
                $GLOBALS超全局数组的作用是用于存储所有全局变量的数据:变量名为下标,变量值为对应元素值。
       
                但通过$GLOBALS操作全局变量,是直接操作(而不是引用操作),即如果unset该对应元素,则全局变量对应变量也被unset掉:
        
              3:实际上,我们还可以在函数内部直接使用$GLOBALS数组,添加元素的方式来创建全局变量,自然也就类似局部使用全局
        
  
  全局访问局部变量的特定语法:
  1:通过引用传递的方式向形参传递一个引用实参变量
              $v1 = 10;

              function f1(&$p1,$p2) {...} //$p1是函数的形参,也即就是函数的内部(局部)变量

              $v2 = f1($v1,10); //此时我们认为$v1就可以使用函数中$p1的值。

      2:使用函数的引用返回形式:见前面引用的方式返回数据

      3:函数中使用global关键字来首次引用一个全局变量,则函数结束后在全局范围就可以使用该变量了

     
  

     





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-652581-1-1.html 上篇帖子: PHP--获取响应头(Response Header)方法 下篇帖子: 浅谈 PHP 与手机 APP 开发(API 接口开发)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表