php函数基础(一)
        【摘要】 
                     
 
  一.函数结构
  
 
   
  
 
  1.构成部分: 
  
 
             关键字 function 
  
  
  
           &nbs...
    
    
    
    
   一.函数结构 
 
 
  1.构成部分:  
 
 
 
              关键字 function  
 
 
 
               函数名:get_sum 
  
 
  
                参数列表:($a,$b) 
  
 
  
                函数体:{} 
  
 
  
                返回值:return $a+$b;  
  
 
  
            
  2.函数命名规则: 
 
 
 
     有效的函数名以字母或下划线开头,后面跟字母,数字或下划线,注意:不能用数字开头。 
 
 
  
 
  3.返回值 
 
 
 
       值通过使用可选的返回语句返回; 
 
 
 
      可以返回包括数组或对象的任意字符; 
 
 
 
       返回语句会终止函数的运行,并将控制权交回调用该函数的代码行。 
 
 
  4.形参,实参 --形参与实参是一一对应的; 
 
 
 
           1>当实参数目小于形参数目时报错,给出警告信息, 
 
 
 
           2>当实参数目多于形参数目时,截取和形参数目相等的参数,实参可以是表达式,可以是常量,变量 
 
 
  5.默认值 
 
 
 
         如果调用函数时传递参数有值,实际参数代替默认值;如果没有值,函数体内使用默认 值; 
 
 
 
       默认值只能是常量或表达式;不能是变量; 
 
 
 
       如 function get_geece($is_formate=flase) 
 
 
 
       或function  get_geece($is_formate=2-1) 
 
 
 
              3.>默认值只能在形参的右边,否则报错 
 
 
  6.强类型参数 
 
 
 
       一般情况,简单类型参数之间是可以相互转化的: 
 
 
 
           1> 整型开头的字符串+数字=数字 
 
 
 
            2> 浮点型开头的字符串+数字=数字 
 
 
 
            3>字符串开头的串+字符串开头的串=0 
 
 
 
   强类型参数定义:为参数列表中的参数指定类型,如果如果传入的数据类型不匹配,则抛出TypeError异常。 
 
 
 
      支持类型: 
 
 
 
   在php7.0中:支持int,float,bool,string 
 
 
 
   默认普通模式,开启严格模式, declare(strict_types=1);   
 
 
  7.可变参数列表 
 
 
  
 
  
    
     - 
      
       
      
      
       
        //php5.5 或更早使用函数
       
      
- 
      
       
      
      
       
        function get_sum()
       
      
- 
      
       
      
      
       
        {
       
      
- 
      
       
      
      
       
            $arg_num = func_num_args();
       
      
- 
      
       
      
      
       
            $num = 0;
       
      
- 
      
       
      
      
       
            if ($arg_num == 0) {
       
      
- 
      
       
      
      
       
                return $num;
       
      
- 
      
       
      
      
       
            } else {
       
      
- 
      
       
      
      
       
        //        var_dump(func_get_args() );
       
      
- 
      
       
      
      
       
                foreach (func_get_args() as $arg) {
       
      
- 
      
       
      
      
       
        //            var_dump($arg);
       
      
- 
      
       
      
      
       
                    $num += $arg;
       
      
- 
      
       
      
      
       
                }
       
      
- 
      
       
      
      
       
                return $num;
       
      
- 
      
       
      
      
       
            }
       
      
- 
      
       
      
      
       
        }
       
      
   func_num_args(): 返回实参个数func_get_arg(索引): 返回某一个实参,必须是实参数组的索引,索引从0开始func_get_args():返回实参数组。func_num_args函数功能– 返回传递到函数的参数数目,其语法如下 : int func_num_args (void )。
   说明 : 返回传递到目前定义函数的参数数目。如果是从函数定义的外面来呼叫此函数,则func_get_arg( )将会产生警告。 
 
 
  func_num_args( )可以用来结合func_get_arg( )和func_get_args( )来允许使用者定义的函式接受variable-length参数列表。其中,func_get_arg( )从参数列表返回项目,其语法:int func_get_arg (int arg_num),传回定义函数的参数列表的第arg_num个参数,其参数从0开始。且函数定义的外面来呼叫此函数会产生警告;并且当arg_num大于函数实际传递的参数数目时亦会产生警告并返回FALSE。 
 
 
  func_get_args()函数和func_get_arg()函数的区别在于,func_get_args()函数传回一数组,数组的各个元素相当于是目前使用者定义函式的参数列的数目。 
 
 
 
     
      - 
       
        
       
       
        
         function get_num2(...$args){
        
       
- 
       
        
       
       
        
             $sum=0;
        
       
- 
       
        
       
       
        
             if (!$args){
        
       
- 
       
        
       
       
        
                 return $sum;
        
       
- 
       
        
       
       
        
             }else{
        
       
- 
       
        
       
       
        
                 foreach ($args as $arg ){
        
       
- 
       
        
       
       
        
                     $sum += $arg;
        
       
- 
       
        
       
       
        
                 }
        
       
- 
       
        
       
       
        
                 return $sum;
        
       
- 
       
        
       
       
        
             }
        
       
- 
       
        
       
       
         
        
       
- 
       
        
       
       
        
         }
        
       
- 
       
        
       
       
        
         echo get_num2(3,4,5),"\n";
        
       
    8.值传递和引用传递
 传递数据类型:数值,对象,字符串,数组 
 
 
 值传递:单向传递,只能由实参传递给形参,而不能由形参传递给实参。内存中形参和实参存储在不同的空间,调用函数时,会给形参分配空间,实参将值传递给形参,调用函数完成后,形参释放空间,实参保留原来的值。
例子:值传递:形参$a,$b和实参$a1,$b1都开辟空间,$a和$b发生交换,但$a1和$b1空间不变化
 
 
 
function swap($a,$b){
$tmp=$a;
$a=$b;
$b=$tmp;
}
$a1=3;
$b1=5;
swap($a1,$b1);
echo "a:".$a1."b:".$b1; //结果 a1=3,b1=5
引用传递:形参没有开辟空间,直接在$a1,$b1空间上进行交换
function swap(&$a,&$b){
$tmp=$a;
$a=$b;
$b=$tmp;
}
$a1=3;
$b1=5;
swap($a1,$b1);
echo "a:".$a1."b:".$b1; // 值发生交换,a1=5,b1=3
 9.变量作用域 
 
 
 
        局部变量:在某个范围内有效,超出范围则无效 
 
 
 
       1>在当前页面中声明的普通变量,不能在函数或者类中起作用; 
 
 
 
       2>在当前页面中声明的普通变量,不能被传递到其他页面; 
 
 
 
        3>在函数中声明的普通变量,在函数内部有效; 
 
 
 
       4>在类中声明的属性,在类的内部有效; 
 
 
   全局变量(global): 
 
 
 
   $GLOBALS 全局变量数组 
 
 
 
      对于php而言,可以这么说,在页面中生成的变量都是全局变量,在整个页面都有效;但是不能被函数或者类中的方法访问。 
 
 
 
     
      - 
       
        
       
       
        
         $g_name = 'lxw';
        
       
- 
       
        
       
       
        
         function get_name()
        
       
- 
       
        
       
       
        
         {
        
       
- 
       
        
       
       
        
             //将变量全局化 方法一:
        
       
- 
       
        
       
       
        
         //    global $g_name;
        
       
- 
       
        
       
       
        
         //    echo $g_name;
        
       
- 
       
        
       
       
         
        
       
- 
       
        
       
       
        
             //方法二:
        
       
- 
       
        
       
       
        
             echo $GLOBALS['g_name'], "\n";
        
       
- 
       
        
       
       
        
         }
        
       
- 
       
        
       
       
         
        
       
- 
       
        
       
       
        
         get_name();
        
       
- 
       
        
       
       
        
         两种方法都输出:lxw
        
       
    超全局变量:
   如果想被函数或类中方法访问,我们就有了超全局变量。 
 
 
 
   注意:在函数或类中,超全局变量是不能作为可变变量的 
 
 
 
   PHP自定义的超全局变量:8个 
 
 
 
   $_GET和$_POST, $_COOKIE和$_SESSION,$_SERVER,$_FILES,$_ENV,$_REQUEST 
 
 
 
     
      - 
       
        
       
       
        
         $v1 = 1;
        
       
- 
       
        
       
       
        
         $v2 = 2;
        
       
- 
       
        
       
       
        
         function show_global()
        
       
- 
       
        
       
       
        
         {
        
       
- 
       
        
       
       
        
         //    将$v1超全局化,开辟空间,函数内部没有改变函数外部的值
        
       
- 
       
        
       
       
        
         //    global $v1, $v2;
        
       
- 
       
        
       
       
        
         //    $v1 =& $v2;
        
       
- 
       
        
       
       
        
         输出:1 2
        
       
- 
       
        
       
       
        
             //运用外部v1 v2本身的值
        
       
- 
       
        
       
       
        
         //  没使用&符号, 这样使用全局变量,并不是通过参数的形式来使用,而是直接在函数内部改变全局变量的值,所以不用&符号也行
        
       
- 
       
        
       
       
        
             $GLOBALS['v1'] =& $GLOBALS['v2'];
        
       
- 
       
        
       
       
        
         }  
        
       
- 
       
        
       
       
        
         show_global();
        
       
- 
       
        
       
       
        
         echo $v1, "\n";
        
       
- 
       
        
       
       
        
         echo $v2 . "\n";
        
       
- 
       
        
       
       
        
         输出:2 2
        
       
    静态变量(static):
   仅仅在函数局部作用域中存在,函数执行完,值并没有丢失 
 
 
 
   给static赋值时不能是函数表达式; 
   
    
 
 
 
     
      - 
       
        
       
       
        
         function show_static()
        
       
- 
       
        
       
       
        
         {
        
       
- 
       
        
       
       
        
             static $x = 0;
        
       
- 
       
        
       
       
        
             echo $x++;
        
       
- 
       
        
       
       
        
         }
        
       
- 
       
        
       
       
         
        
       
- 
       
        
       
       
        
         show_static();
        
       
- 
       
        
       
       
        
         show_static();
        
       
- 
       
        
       
       
        
         输出:0 1
        
       
    10.可变函数: 灵活, 方便,多变
   定义:变量名后有圆括号,PHP将寻找与变量的值同名的函数,并且尝试执行它 
 
 
 
    
     - 
      
       
      
      
       
        //可变函数
       
      
- 
      
       
      
      
       
        function get_apple($num){
       
      
- 
      
       
      
      
       
            return "in the get_apple(),we need".$num."boxs";
       
      
- 
      
       
      
      
       
        }
       
      
- 
      
       
      
      
        
       
      
- 
      
       
      
      
       
        function get_orange($num){
       
      
- 
      
       
      
      
       
            return "in the get_orange(),we need".$num."boxs";
       
      
- 
      
       
      
      
       
        }
       
      
- 
      
       
      
      
        
       
      
- 
      
       
      
      
       
        function get_fruit($fruit,$num){
       
      
- 
      
       
      
      
       
            $str="get_".$fruit;
       
      
- 
      
       
      
      
       
            return $str($num);
       
      
- 
      
       
      
      
       
        }
       
      
- 
      
       
      
      
        
       
      
- 
      
       
      
      
       
        echo get_fruit('apple',5),"\n";
       
      
   
     
      - 
       
        
       
       
        
         不使用可变函数
        
       
- 
       
        
       
       
        
         function get_fruit2($string,$numb){
        
       
- 
       
        
       
       
        
           
        
       
- 
       
        
       
       
        
             if ($string=='apple'){
        
       
- 
       
        
       
       
        
                 return get_apple($numb);
        
       
- 
       
        
       
       
        
             }elseif($string=='orange'){
        
       
- 
       
        
       
       
        
                 return get_orange($numb);
        
       
- 
       
        
       
       
        
             }
        
       
- 
       
        
       
       
        
         }
        
       
- 
       
        
       
       
        
         echo get_fruit2('apple',4);
        
       
    11.嵌套函数:
   特点:PHP嵌套函数有一些特别之处,最特别的是,当外部函数被调用时,内部函数就会自动进入全局域中,成为新的定义函数。 
 
 
 
   单层嵌套&&多层嵌套 
   
    
 
 
 
     
      - 
       
        
       
       
        
         当in函数已经被存在时,在调用out函数就不能重复定义in函数
        
       
- 
       
        
       
       
        
         function out(){
        
       
- 
       
        
       
       
        
             if (!function_exists('in')){
        
       
- 
       
        
       
       
        
                 function in(){
        
       
- 
       
        
       
       
        
                     echo "out 函数先执行,in 函数才能执行,我是in函数\n";
        
       
- 
       
        
       
       
        
                 }
        
       
- 
       
        
       
       
        
             }
        
       
- 
       
        
       
       
        
         }
        
       
- 
       
        
       
       
         
        
       
- 
       
        
       
       
        
         out();
        
       
- 
       
        
       
       
        
         in();
        
       
- 
       
        
       
       
        
         out();//  Cannot redeclare in() 加判断后不再报错
        
       
- 
       
        
       
       
        
         输出:out 函数先执行,in 函数才能执行,我是in函数
        
       
- 
       
        
       
       
         
        
       
- 
       
        
       
       
        
         //多层嵌套
        
       
- 
       
        
       
       
        
         function f_out(){
        
       
- 
       
        
       
       
        
             echo 'out',"\n";
        
       
- 
       
        
       
       
        
             function f_mid(){
        
       
- 
       
        
       
       
        
                 echo 'mid',"\n";
        
       
- 
       
        
       
       
        
                 function f_in(){
        
       
- 
       
        
       
       
        
                     echo 'in',"\n";
        
       
- 
       
        
       
       
        
                 }
        
       
- 
       
        
       
       
        
             }
        
       
- 
       
        
       
       
        
         }
        
       
- 
       
        
       
       
        
         f_out();
        
       
- 
       
        
       
       
        
         f_mid();
        
       
- 
       
        
       
       
        
         f_in();
        
       
- 
       
        
       
       
        
         输出:
        
       
- 
       
        
       
       
        
         out
        
       
- 
       
        
       
       
        
         mid
        
       
- 
       
        
       
       
        
         in
        
       
- 
       
        
       
       
         
        
       
- 
       
        
       
       
         
        
       
- 
       
        
       
       
        
         嵌套函数传参数
        
       
- 
       
        
       
       
        
         function out($msg_str){
        
       
- 
       
        
       
       
        
             if (!function_exists('in')){
        
       
- 
       
        
       
       
        
                 function in($msg){
        
       
- 
       
        
       
       
        
         //            echo "out 函数先执行,in 函数才能执行,我是in函数\n";
        
       
- 
       
        
       
       
        
                     echo "function in :".$msg."\n";
        
       
- 
       
        
       
       
        
                 }
        
       
- 
       
        
       
       
        
             }
        
       
- 
       
        
       
       
         
        
       
- 
       
        
       
       
        
             echo "function out :".$msg_str."\n";
        
       
- 
       
        
       
       
        
             in($msg_str);
        
       
- 
       
        
       
       
        
         }
        
       
- 
       
        
       
       
         
        
       
- 
       
        
       
       
        
         out("Hello");
        
       
- 
       
        
       
       
        
         in('123');
        
       
- 
       
        
       
       
        
         输出:
        
       
- 
       
        
       
       
        
         function out :Hello
        
       
- 
       
        
       
       
        
         function in :Hello
        
       
- 
       
        
       
       
        
         function in :123
        
       
    12.递归函数
         定义:函数在它的函数体内调用它自身, 
 
 
 
        作用:分解问题,调用自身 
 
 
 
     
      - 
       
        
       
       
        
         function digui($i){
        
       
- 
       
        
       
       
        
             echo "当前参数为\$i:{$i}\n";
        
       
- 
       
        
       
       
        
             $sum=1;
        
       
- 
       
        
       
       
        
             if($i==1){
        
       
- 
       
        
       
       
        
                 echo "\$i={$i},\$sum={$sum}\n";
        
       
- 
       
        
       
       
        
                 return 1;
        
       
- 
       
        
       
       
        
             }else{
        
       
- 
       
        
       
       
        
                 $sum=$i*digui($i-1);
        
       
- 
       
        
       
       
        
             }
        
       
- 
       
        
       
       
        
           echo "\$i={$i},\$sum={$sum}\n";
        
       
- 
       
        
       
       
        
             return $sum;
        
       
- 
       
        
       
       
        
         }
        
       
- 
       
        
       
       
        
         echo digui(3);
        
       
- 
       
        
       
       
        
         输出:
        
       
- 
       
        
       
       
        
         当前参数为$i:3
        
       
- 
       
        
       
       
        
         当前参数为$i:2
        
       
- 
       
        
       
       
        
         当前参数为$i:1
        
       
- 
       
        
       
       
        
         $i=1,$sum=1
        
       
- 
       
        
       
       
        
         $i=2,$sum=2
        
       
- 
       
        
       
       
        
         $i=3,$sum=6
        
       
- 
       
        
       
       
        
         6
        
       
    13.匿名函数(闭包)
   定义:匿名函数(anonymous functions),又叫闭包函数(closures),允许临时创建一个没有指定名称的函数,最经常用作回调函数(callback)参数的值。使用:闭包函数可以作为变量的值来使用。 
   
    
 
 
 
     
      - 
       
        
       
       
        
         方法一:
        
       
- 
       
        
       
       
        
         $msg = "lxw";
        
       
- 
       
        
       
       
        
         $bibao = function () use (&$msg) {  //多一个&符号  
        
       
- 
       
        
       
       
        
             echo "hello :" . $msg;
        
       
- 
       
        
       
       
        
         };  //必须加分号
        
       
- 
       
        
       
       
        
         $msg = "lxw22";
        
       
- 
       
        
       
       
        
         $bibao();
        
       
- 
       
        
       
       
        
         输出:lxw22
        
       
- 
       
        
       
       
        
         方法二:
        
       
- 
       
        
       
       
        
         $msg = "lxw";
        
       
- 
       
        
       
       
        
         $bibao = function () use ( $msg) {
        
       
- 
       
        
       
       
        
             echo "hello :" . $msg;
        
       
- 
       
        
       
       
        
         };  //必须加分号
        
       
- 
       
        
       
       
        
         $msg = "lxw22";
        
       
- 
       
        
       
       
        
         $bibao();
        
       
- 
       
        
       
       
        
         输出:lxw
        
       
- 
       
        
       
       
         
        
       
- 
       
        
       
       
        
         方法三:
        
       
- 
       
        
       
       
        
         $msg = "lxw";
        
       
- 
       
        
       
       
        
         $bibao = function () use ( $msg) {
        
       
- 
       
        
       
       
        
             echo "hello :" . $msg;
        
       
- 
       
        
       
       
        
         };  //必须加分号
        
       
- 
       
        
       
       
        
         $msg = "lxw22";
        
       
- 
       
        
       
       
        
         $bibao();
        
       
- 
       
        
       
       
        
         输出:lxw
        
       
    
     
      - 
       
        
       
       
        
         方法一:定义在use之后按照引用传递调用参数;
        
       
- 
       
        
       
       
         
        
       
- 
       
        
       
       
        
         方法二和三比较说明: use使用的变量在定义闭包函数之前先声明好,而不是在调用的时候在声明;
        
       
- 
       
        
       
       
        
         闭包函数经典用法
        
       
- 
       
        
       
       
        
         function test_closure($name,Closure $clo){
        
       
- 
       
        
       
       
        
             echo "Hello",$name."\n";
        
       
- 
       
        
       
       
        
             $clo();  //注意加括号()
        
       
- 
       
        
       
       
        
         }
        
       
- 
       
        
       
       
         
        
       
- 
       
        
       
       
        
         test_closure("Lily",function (){
        
       
- 
       
        
       
       
        
             echo  "welocome";
        
       
- 
       
        
       
       
        
         });
        
       
- 
       
        
       
       
        
         输出:hello Lily,
        
       
- 
       
        
       
       
        
               welcome
        
       
    14,代码复用性:
        include与require 
 
 
 include_once与require_once:有且仅引用一次require与require_once: 引入不存在的文件时报致命性错误,后面的代码停止执行include与include_once: 引入不存在的文件时报j警告性错误,后面的代码继续执行
文章来源: blog.csdn.net,作者:lxw1844912514,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/lxw1844912514/article/details/100028382
        【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
            cloudbbs@huaweicloud.com
        
        
        
        
        
        
        - 点赞
- 收藏
- 关注作者
 
             
           
评论(0)