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,"");

?>

内存空间分配如下:

php函数

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

堆,动态申请的空间,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来修饰;

你可能感兴趣的:(PHP)