在PHP的函数中,参数传递可以分为值传递和引用传递(也称为地址传递)两种。

默认情况下,PHP是按值传递参数的。值传递参数调用函数时将常量或变量的值(通常称其为实参)传递给函数的参数(通常称为形参)。值传递的特点是实参与行参分别存储在内存中,是两个不相关的独立变量。因此,在函数内部改变形参的值时,实参的值一般是不会改变的。

引用传递(按地址传递)的特点是实参与行参共享一块内存。因此,当形参的值改变的时候,实参的值也会相应的做出改变。从这种角度上说,可以认为形参合实参是同一个变量。

定义引用传递参数时,可以在参数前面加上引用符号&。

<?php
function printString(&$string){echo($string);$string="打印完成";
}
$str="测试字符!n";
printString($str);
echo($str);
//程序输出:测试字符!打印完成

php还支持可变长度的参数列表。在定义函数时,不指定参数。在调用函数时,可以根据需要指定参数的数量,通过与参数相关的几个系统函数获取参数信息。具体说明为:

<?php
function mysum(){$num = func_num_args();echo("函数包含:".$num."个参数n");$sum = 0;for($i=0; $i < $num; $i++){$sum = $sum + func_get_arg($i);}echo("参数累加纸盒为:".$sum);
}
mysum(1,2,3,4);
// 程序输出:函数包含:4个参数 参数累加纸盒为:10

unc_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链接的类时,可以书写如下代码:

<?php
class mydb{private $user;private $pass;private $host;private $db;public function __construct(){$num_args=func_num_args();if($num_args>0){$args=func_get_args();$this->host=$args[0];$this->user=$args[1];$this->pass=$args[2];$this->connect();}}
}

再给出一个示例程序:

<?php
function foo(){$numargs = func_num_args();echo "Number of arguments:$numargs<br>n";if($numargs >=2 ){echo "Second argument is: " . func_get_arg (1) . "<br>n";}$arg_list = func_get_args();for ($i = 0; $i < $numargs; $i++) {echo "Argument $i is: " . $arg_list[$i] . "<br>n";}
}
foo(1,2,3);

PHP在函数体中传递与接收参数相关推荐

  1. php 接收传值_PHP在函数体中传递与接收参数

    在PHP的函数中,参数传递可以分为值传递和引用传递(也称为地址传递)两种. 默认情况下,PHP是按值传递参数的.值传递参数调用函数时将常量或变量的值(通常称其为实参)传递给函数的参数(通常称为形参). ...

  2. WebAPI Post模式下传递、接收参数的几种方法

    创建实体类 前一篇博客讲了Get模式下的传递.接收参数的几种方法,现在来介绍一下Post模式下传递.接收参数的几种方法.首先还是老样子,创建一个空的ASP.NET WebAPI工程,在Models文件 ...

  3. mybatis添加方法可以传map吗_Mybatis中传递多个参数的4种方法总结

    前言 现在大多项目都是使用Mybatis了,但也有些公司使用Hibernate.使用Mybatis最大的特性就是sql需要自己写,而写sql就需要传递多个参数.面对各种复杂的业务场景,传递参数也是一种 ...

  4. java ajax data_jquery ajax 方法中传递的data参数,如何在java类中获取

    展开全部 var params="username="+"1"; $.ajax({ type : "POST", //数据发送方式 url ...

  5. layer打开iframe弹层,传递与接收参数

    打开iframe弹层,并接收操作传值: $(".btn-sel").click(function () {layer.open({btn: ['确定'],type: 2,title ...

  6. JAVA中jsp怎么接收参数_如何使用JSP从URL获取参数

    在GET请求中,请求参数取自查询字符串(URL上问号后面的数据).例如,URL http://hostname.com?p1=v1&p2=v2包含两个请求参数--p1和p2.在POST请求中, ...

  7. WebAPI Get模式下传递、接收参数的几种方法

    创建实体类 创建一个空的ASP.NET WebAPI工程,在Models文件夹下创建一个实体类:User,代码如下: using System; using System.Collections.Ge ...

  8. 从对话框中传递参数到视图类

    原文地址:从对话框中传递参数到视图类作者:多彩 这个看似简单的问题确实让我郁闷了好几天,但想出来居然只用了一分钟不到.看来还是很有纪念价值的. 假设在视图类的一个需要传递参数的函数中定义对话框的对象 ...

  9. Struts2中Action的属性接收参数

    Struts2中Action的属性接收参数,有三种传递并接收参数的方式,第一种是在Action添加成员属性接收参数,第二种是域模型,就是利用对象域来进行传递和接收参数,第三种是ModelDriven接 ...

最新文章

  1. HA: Forensics靶机渗透测试
  2. 对于生活服务小公司网站的看法
  3. 尚学堂requireJs课程---1、作用域回顾
  4. 【机器学习PAI实践十二】机器学习实现男女声音识别分类(含语音特征提取数据和代码)
  5. JAVA——基于HttpClient的通过单点登录方式(统一身份认证平台)登录正方教务系统[1999-2020]基本解决方案
  6. leetcode193. 有效电话号码 正则了解一下
  7. Facebook 正在大规模重构 React Native
  8. 《像程序员一样思考》
  9. android恢复微信好友,安卓微信删除好友怎么找回 找回好友详细方法
  10. IE浏览器版本检测小结
  11. Linux Get命令
  12. 题目:输入一个8bit数,输出其中1的个数,只能使用1bit全加器
  13. 施罗德: 以大数据技术洞悉投资先机,同时管理风险
  14. 如何靠代码发家致富?——10种可以赚钱的途径
  15. SPDK简介(其与Ceph rbd的关系)
  16. 关于旅行社网站项目网页布局的设计思路
  17. 网页自动弹窗被拦截 html,JS弹出新窗口被拦截的解决方法
  18. 销售培训的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  19. python django项目进度管理平台
  20. 什么是内网,什么是公网,什么是私网

热门文章

  1. 检索数据_19_按照字符串对结果排序
  2. 易语言利用服务器更新,易语言使用FTP服务器更新软件案例
  3. Faster R-CNN改进篇(一): ION ● HyperNet ● MS CNN
  4. 关于初学Go的一些总结
  5. 关闭或开启memory_target
  6. 前端vue框架的跨域处理方法
  7. zabbix配置邮箱报警
  8. 【笔记】分离字符串中的数字、字母和汉字
  9. Kruskal Prim模板
  10. 猎豹浏览器怎么不能设置背景着颜色护眼?