zoukankan      html  css  js  c++  java
  • php函数

    函数不区分大小写;

    函数参数传递方式:值传递,引用传递(定义的时候使用&,调用的时候就不需要添加了)

        //关于函数参数的传递
        //值传递
        function foo(&$x){
            $x = $x + 50;
        }
    
        $x = 200;
        foo($x);
        echo $x;  //结果是250

    关于可变参数:php中没有函数重载,可变参数是指参数的个数是变化的。

    func_num_args()//获取参数的个数;

    func_get_args()//获取所有的参数,返回的是一个数组

    func_get_arr(int)//获取数组中执行下边的数

     

    //对若干个数求和,比如add(2,3),add(2,3,4),add(2,3,4,5,6,7)
        //可变参数,指的是参数的个数是变化的
        //func_num_args():获取参数的个数
        //func_get_args():获取所有的参数,返回的是一个数组
        //func_get_arg(int):获取数组中指定下标的数
        function add(){
            //测试传参个数
            //echo func_num_args();  
            //测试获取所有的参数
            //print_r(func_get_args());
            //测试一下具体获取某一个
            //echo func_get_arg(3);
            $sum = 0;
            for($i = 0; $i < func_num_args(); $i++){
                $sum += func_get_arg($i);
            }
    
            return $sum;
        }
    
        //echo add(2,3,4,5,6,7);
        echo add(2,3,4);

     

    递归:

    递归需要注意细节:

    1、递归不能无限制的调用下去,因为栈空间是有限的,应有停止条件。

    2、递归中必须有完成终极任务的语句序列,使函数有意义,比如 return 1;

    3、递归函数当然要有递归语句了;

    4、递归应先测试条件,再递归调用;

    递归的优缺点:

      优点:结构清晰,可读性强;

      缺点:不好理解,运行的效率低,占用空间和时间都比非递归函数多

     

    <?php
        //函数递归案例分析
        test(10);
        function test($n){
            echo $n."&nbsp;";
            if($n > 0){
                test($n-1);
            }else{
                echo "-----&nbsp;";    
            }
            echo $n."&nbsp;";
        }
        
        //结果是10 9 8 7 6 5 4 3 2 1 0 ----- 0 1 2 3 4 5 6 7 8 9 10
    ?>

     

    //简单但容易出错的笔试题
        demo(10);
    
        function demo($n){
            if($n > 0){        
                demo((int)($n/2));
            }
            echo $n."<br />";
        } //输出结果是:0,1 2 5 10
    <?php
        //使用递归实现10!注意0! = 1
        function fac($n){
            if($n > 0){
                return $n*fac($n -1);
            }else{
                return 1;
            }
        }
    
        echo fac(7);
    ?>
    <?php
        //函数的默认值:从右开始设置默认值
        header("Content-type:text/html; charset=utf-8");
        function show($name,$age,$gender="保密",$nationality="中国"){
            echo "姓名:".$name."<br />";
            echo "年龄:".$age."<br />";
            echo "性别:".$gender."<br />";
            echo "国籍:".$nationality;
        }
        show("zhangsan",31,"");
    ?>

    内存空间分配如下:

     栈,通常存放局部变量(函数)

    堆,动态申请的空间,new

    函数的调用机制:

     

    函数的调用和栈息息相关。

     

    栈是内存的存储空间的一种分配方式,物理上。 栈是一种数据结构,后进先出。

     

    函数的调用实际上就是入栈和出栈的过程。

     

    函数的步骤:

     

    ① 建立被调函数的栈空间,其大小由函数体定义的数据量来决定。

     

    ② 保护调用函数的运行状态和返回地址

     

    ③ 传递参数

     

    ④ 将控制权转交给被调函数

     

    ⑤ 函数运行完成后,复制返回值到函数数据块底部

     

    ⑥ 恢复调用函数的运行状态

     

    ⑦ 返回调用函数

     

     静态变量static

    php中静态属性只能被初始化为一个字符值或常量,不能使用表达式

    静态变量存放在内存中静态变量的存储区域,只在第一次赋值的时候进行初始化。

     

     

    一个经典面试题:

    include、require、include_once、require_once之间的区别?

    1、require要求更加严格,如果程序出错(包含文件不存在或者无法访问的时候)会停止程序的执行;

      include程序出错,输出错误,会继续执行后面的代码;

      这两种结构除了在如何处理失败之外完全一样,include()产生一个警告,而require()则导致一个致命                错误;

    2、include和include_once之间的区别

      使用include_once如果前面已经包含过,则不再包含,如果使用include重复包含的时候会出错;

      Requirerequire_once之间的区别和Includeinclude_once相同。

    有四个,到底用哪一个?

      require_once,

      严格检查,如果包含的文件不存在或无法访问,则会报错,停止程序的运行,同时避免了重复包含的      问题。性能方面会有一丁点的影响,因为做了额外的操作(检测是否已经包含过了)。

     

      在php中全局变量时用global来修饰;

  • 相关阅读:
    SoapUI开源版简单定制报告1
    python json模块 字典 输出中文
    Django文件上传机制用法详解(转)
    选择排序
    插入排序
    Python单元测试框架 unittest
    Design Pattern —— Prototype /Template Method/Iterator/Composite/Bridge
    Design Pattern ——Factory Method&Abstract Factory
    Design Pattern ——Builder
    JAVA泛型那些事儿
  • 原文地址:https://www.cnblogs.com/RightDear/p/2754434.html
Copyright © 2011-2022 走看看