• PHP在函数体中传递与接收参数


    在PHP的函数中,参数传递可以分为值传递和引用传递(也称为地址传递)两种。
    
    默认情况下,PHP是按值传递参数的。值传递参数调用函数时将常量或变量的值(通常称其为实参)传递给函数的参数(通常称为形参)。值传递的特点是实参与行参分别存储在内存中,是两个不相关的独立变量。因此,在函数内部改变形参的值时,实参的值一般是不会改变的。
    
     引用传递(按地址传递)的特点是实参与行参共享一块内存。因此,当形参的值改变的时候,实参的值也会相应的做出改变。从这种角度上说,可以认为形参合实参是同一个变量。
    
     定义引用传递参数时,可以在参数前面加上引用符号&01    <?php
    02    function printString(&$string){
    03        echo($string);
    04        $string="打印完成";
    05    }
    06     
    07    $str="测试字符!n";
    08    printString($str);
    09    echo($str);
    10    ?>
    11     
    12    // 程序输出:测试字符! 打印完成
    
    php还支持可变长度的参数列表。在定义函数时,不指定参数。在调用函数时,可以根据需要指定参数的数量,通过与参数相关的几个系统函数获取参数信息。具体说明为:
    01    <?php
    02        function mysum()
    03        {
    04            $num = func_num_args();
    05            echo("函数包含:".$num."个参数n");
    06            $sum = 0;
    07             
    08            for($i=0; $i < $num; $i++)
    09            {
    10                $sum = $sum + func_get_arg($i);
    11            }
    12            echo("参数累加纸盒为:".$sum);
    13        }
    14         
    15        mysum(1,2,3,4);
    16    ?>
    17     
    18    // 程序输出:函数包含:4个参数 参数累加纸盒为:10
    
    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()函数传回一数组,数组的各个元素相当于是目前使用者定义函式的参数列的数目。
    
    在我们构建PHP类的时候,灵活使用这三个函数,可以起到非常理想的效果,例如外面在创建PHP和MYSQL链接的类时,可以书写如下代码:
    01    <?php
    02    class mydb {
    03        private $user;
    04        private $pass;
    05        private $host;
    06        private $db;
    07         
    08        public function __construct(){
    09            $num_args=func_num_args();
    10            if($num_args>0){
    11                $args=func_get_args();
    12                $this->host=$args[0];
    13                $this->user=$args[1];
    14                $this->pass=$args[2];
    15                $this->connect();
    16            }
    17        }
    18    }
    19    ?>
    
    再给出一个示例程序:
    01    <?php
    02    function foo() {
    03        $numargs = func_num_args();
    04        echo "Number of arguments: $numargs<br>n";
    05        if ($numargs >= 2) {
    06            echo "Second argument is: " . func_get_arg (1) . "<br>n";
    07        }
    08        $arg_list = func_get_args();
    09        for ($i = 0; $i < $numargs; $i++) {
    10            echo "Argument $i is: " . $arg_list[$i] . "<br>n";
    11        }
    12    }
    13    foo (1, 2, 3);
    14    ?>
  • 相关阅读:
    Firefly 介绍
    9秒社团跨平台开发引擎CrossApp宣布正式开源
    页面置换算法
    Selenium
    C++虚函数、虚继承
    链表题目
    二叉树分类
    求连续子数组的最大和
    拓扑排序
    二叉树题目
  • 原文地址:https://www.cnblogs.com/afei-happy/p/3376393.html
Copyright © 2020-2023  润新知