zoukankan      html  css  js  c++  java
  • php函数基础(一)

    一.函数结构
     
    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警告性错误,后面的代码继续执行
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    Python for Infomatics 第14章 数据库和SQL应用四(译)
    展望2017
    bing的简单英文字典工具
    自我安慰
    Python for Infomatics 第14章 数据库和SQL应用三(译)
    Python for Infomatics 第14章 数据库和SQL应用二(译)
    Python for Infomatics 第14章 数据库和SQL应用一(译)
    希望父亲早日恢复
    Python for Infomatics 第13章 网页服务四(译)
    Python for Infomatics 第13章 网页服务三(译)
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15453801.html
Copyright © 2011-2022 走看看