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来修饰;

原文地址:https://www.cnblogs.com/RightDear/p/2754434.html