PHP函数参数传递的方式整理

在调用函数时,需要向函数传递参数,被传入函数的参数称为实参,而函数定义的参数称为形参。而向函数传递参数的方式有四种,分别是值传递、引用传递、默认参数和可变长度参数。

1. 值传递

值传递是 PHP 中函数的默认传值方式,也称为“拷贝传值”。顾名思义值传递的方式会将实参的值复制一份再传递给函数的形参,所以在函数中操作参数的值并不会对函数外的实参造成影响。因此如果不希望函数修改实参的值,就可以通过值传递的方式。

【示例】下面定义一个简单的函数,函数有两个参数,在函数中交换参数的值。

<?php
  function swap($a, $b){
    echo '函数内,交换前 $a = '.$a.', $b = '.$b.'<br>';
    $temp = $a;
    $a = $b;
    $b = $temp;
    echo '函数内,交换后 $a = '.$a.', $b = '.$b.'<br>';
  }

  $x = 5;
  $y = 7;
  echo '函数外,交换前 $x = '.$x.', $y = '.$y.'<br>';
  swap($x, $y);
  echo '函数外,交换后 $x = '.$x.', $y = '.$y;
?>

运行结果如下:

函数外,交换前 $x = 5, $y = 7
函数内,交换前 $a = 5, $b = 7
函数内,交换后 $a = 7, $b = 5
函数外,交换后 $x = 5, $y = 7

通过运行结果可以看到,在函数内,数值确实是交换了,而在函数外部,数值却没有变化。因此可以说,函数的值传递只是传递变量的副本。那么要是想让函数能够操作函数外实参的话,就需要使用引用传递的方式了。

2. 引用传递

参数的引用传递就是把实参的内存地址复制一份,然后传递给函数的形参,实参和形参都指向同一个内存地址,因此函数对形参的操作,会影响到函数外的实参。

按引用传递就是将实参的内存地址传递到函数的形参中。因此实参和形参指向的是同一个内存地址。这时在函数内部的所有操作都会影响到函数外实参的值。引用传递的方式就是在值传递的基础上加上一个&符号,如下所示:

function name (&参数1, &参数2, ..., &参数3) {
  ...
}

【示例】将上面示例的代码略作调整,使用引用传递的方式向 swap 函数中传递参数,代码如下所示:

<?php
  function swap(&$a, &$b){
    echo '函数内,交换前 $a = '.$a.', $b = '.$b.'<br>';
    $temp = $a;
    $a = $b;
    $b = $temp;
    echo '函数内,交换后 $a = '.$a.', $b = '.$b.'<br>';
  }

  $x = 5;
  $y = 7;
  echo '函数外,交换前 $x = '.$x.', $y = '.$y.'<br>';
  swap($x, $y);
  echo '函数外,交换后 $x = '.$x.', $y = '.$y;
?>

运行结果如下:

函数外,交换前 $x = 5, $y = 7
函数内,交换前 $a = 5, $b = 7
函数内,交换后 $a = 7, $b = 5
函数外,交换后 $x = 7, $y = 5

3. 默认参数

默认参数就是给函数的某个或多个形式参数指定一个默认的值,如果调用函数时不传入对应的值,那么函数就会使用这个默认值,这样可以避免调用时出现没有参数的错误,也可以使一些程序显得更加合理。如果传入对应的参数,就会替换这个默认值。

函数的默认参数如下所示:

function name ($str = 'C语言中文网', $url) {
  echo $str;
}

其中,形式参数 $str 后面的“C语言中文网”就是它的默认值,形参与默认值之间需要使用=连接。

【示例】下面来定义一个具有默认参数的函数,如下所示:

<?php
  function add($a, $b=56){
    echo $a.' + '.$b.' = '.($a+$b).'<br>';
  }
  add(11);
  add(37, 29);
?>

运行结果如下:

11 + 56 = 67
37 + 29 = 66

默认参数也可以是多个,而且默认参数必须放在非默认参数右边,并且指定默认参数的值必须是一个具体的值,如数字、字符串,而不能是一个变量。

【示例】下面来定义一个具有多个默认参数的函数,如下所示:

<?php
  function add($a, $b=33, $c=57){
    echo $a.' + '.$b.' + '.$c.' = '.($a+$b+$c).'<br>';
  }
  add(11);
  add(31, 22);
  add(64, 9, 7);
?>

运行结果如下:

11 + 33 + 57 = 101
31 + 22 + 57 = 110
64 + 9 + 7 = 80

4. 可变长度参数

在 PHP 5.6 及以后的版本中,函数的形式参数可使用…来表示函数可接受一个可变数量的参数,可变参数将会被当作一个数组传递给函数。示例如下:

<?php
  function test(...$arr){
    print_r($arr);
  }
  echo '<pre>';
  test(1, 2, 3, 4);
  test(5, 6, 7, 8, 9, 10);
?>

运行结果如下:

Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
Array
(
[0] => 5
[1] => 6
[2] => 7
[3] => 8
[4] => 9
[5] => 10
)

到此这篇关于PHP函数参数传递的方式整理的文章就介绍到这了,更多相关PHP函数参数传递的四种方式内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • PHP页面间参数传递的四种方法详解

    我们定义page01.php和page02.php两个php文件,将page01中的内容想办法传递到page02,然后供我们继续使用.--------------------------------------------------------------------------------第一种:使用客户端浏览器的cookie.cookie很容易理解,就是一个临时文件,可以把它看成一个储藏室,浏览器在浏览的过程中记录一些信息,就暂时存放在这里.在page01中设置一个cookie. 复制代码

  • php函数间的参数传递(值传递/引用传递)

    php:函数间的参数传递 1.值传递 复制代码 代码如下: <?php function exam($var1){ $var1++: echo "In Exam:" . $var1 . "<br />"; } $var1 = 1; echo $var1 . "<br />"; exam($var1); echo $var1 . "<br />"; ?> -------------

  • PHP函数参数传递的方式整理

    在调用函数时,需要向函数传递参数,被传入函数的参数称为实参,而函数定义的参数称为形参.而向函数传递参数的方式有四种,分别是值传递.引用传递.默认参数和可变长度参数. 1. 值传递 值传递是 PHP 中函数的默认传值方式,也称为"拷贝传值".顾名思义值传递的方式会将实参的值复制一份再传递给函数的形参,所以在函数中操作参数的值并不会对函数外的实参造成影响.因此如果不希望函数修改实参的值,就可以通过值传递的方式. [示例]下面定义一个简单的函数,函数有两个参数,在函数中交换参数的值. <

  • C/C++函数参数传递机制详解及实例

    C/C++函数参数传递机制详解及实例 概要: C/C++的基本参数传递机制有两种:值传递和引用传递,我们分别来看一下这两种的区别. (1)值传递过程中,需在堆栈中开辟内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本.值传递的特点是被调函数对形参的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值. (2)引用传递过程中,被调函数的形参虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址.被调函数对形参的任何操作都被处理成间接寻址,

  • Android实现截屏方式整理(总结)

    本文介绍了Android 实现截屏方式整理,分享给大家.希望对大家有帮助 可能的需求: 截自己的屏 截所有的屏 带导航栏截屏 不带导航栏截屏 截屏并编辑选取一部分 自动截取某个空间或者布局 截取长图 在后台去截屏 1.只截取自己应用内部界面 1.1 截取除了导航栏之外的屏幕 View dView = getWindow().getDecorView(); dView.setDrawingCacheEnabled(true); dView.buildDrawingCache(); Bitmap

  • AngularJS中一般函数参数传递用法分析

    本文实例讲述了AngularJS中一般函数参数传递用法.分享给大家供大家参考,具体如下: 1. 模型参数 直接使用变量名,不要加引号 <!doctype html> <html ng-app="passAter"> <head> <meta charset="utf-8"/> </head> <body> <div ng-controller="passCtrl">

  • 有关.NET参数传递的方式引发的思考

    下面就简单的介绍一下.NET的一些常用参数用法,如有不足还望指正,也欢迎大家在下面留言讨论,分享自己的见解. 一.DotNet参数概述: .NET中参数(形式参数)变量是方法或索引器声明的一部分,而实参是调用方法或索引器时使用的表达式. 在CLR中,默认的情况下所有的方法参数都是传值的.在传递引用类型的对象时,对一个对象的引用会传递给方法.这里的船引用本身是以传值的方式传给方法的.这也意味着方法能够修改对象,而调用者能看到这些修改.对于值类型的实例,传给方法的实例的一个副本.意味着方法将获得它专

  • javascript自定义函数参数传递为字符串格式

    自定义函数参数传递为 字符串格式 ,传递方式 1:用this传递 2:引号缺省 3:转义字符(html中 " 代表"双引号,&apos;代表单引号,javascript中直接\" 和Java通用转义字符集) <html> <head> <script language="LiveScript"> function print(arg){ alert("你好!"+arg); } </scr

  • 浅谈JavaScript 函数参数传递到底是值传递还是引用传递

    在传统的观念里,都认为JavaScript函数传递的是引用传递(也称之为指针传递),也有人认为是值传递和引用传递都具备.那么JS的参数传递到底是怎么回事呢?事实上以下的演示也完全可以用于Java 首先来一个比较简单的,基本类型的传递: function add(num){ num+=10; return num; } num=10; alert(add(num)); aelrt(num); //输出20,10 对于这里的输出20,10,按照JS的官方解释就是在基本类型参数传递的时候,做了一件复制

  • Python中函数参数调用方式分析

    本文实例讲述了Python中函数参数调用方式.分享给大家供大家参考,具体如下: Python中函数的参数是很灵活的,下面分四种情况进行说明. (1) fun(arg1, arg2, ...) 这是最常见的方式,也是和其它语言类似的方式 下面是一个实例: >>> def fun(x, y): return x - y >>> fun(12, -2) 14 (2) fun(arg1, arg2=value2, ...) 这种就是所谓的带默认参数的函数,调用的时候我们可以指定

  • Python函数的定义方式与函数参数问题实例分析

    本文实例讲述了Python函数的定义方式与函数参数问题.分享给大家供大家参考,具体如下: 涉及内容: 函数的定义方式 函数的文字描述 空操作语句 位置参数 默认参数 关键参数 可变长度参数 函数的定义方式: 函数的文字说明: 为了让别人了解函数的意义,或者避免自己遗忘,可以使用 字符串(不需要赋值,单引号,双引号,多引号都行).#注释 将文字说明写在函数最开始的位置 def function1() : """ 这是这个程序的说明文字 """ pr

  • python装饰器相当于函数的调用方式

    1. 普通装饰器 import logging 1. foo = use_loggine(foo) def use_loggine(func): def wrapper(): logging.warn("%s is running " % func.__name__) return func() return wrapper @use_loggine def foo(): print "aaa" foo() print foo.__name__ 2. func 需要

随机推荐