【web 开发基础】PHP 中的默认(缺省)参数的函数详解 (33)

举报
迷彩 发表于 2023/06/28 16:12:12 2023/06/28
1k+ 0 0
【摘要】 前言在PHP中有一种函数,在调用的时候某些参数是可以缺省的,也就是说,在调用函数的时候可以传值,也可以不传值,如果在调用函数的时候传入具体的值就会使用传入的值,否则就会使用默认的值,默认的值在函数定义的时候就已经设置好,默认(缺省)参数的函数格式如下所示:mixed funName(string name,[,string value [, int expire]) #在参数列表中使用[]描...

前言

在PHP中有一种函数,在调用的时候某些参数是可以缺省的,也就是说,在调用函数的时候可以传值,也可以不传值,如果在调用函数的时候传入具体的值就会使用传入的值,否则就会使用默认的值,默认的值在函数定义的时候就已经设置好,默认(缺省)参数的函数格式如下所示:

mixed funName(string name,[,string value [, int expire]) #在参数列表中使用[]描述参数

默认(缺省)参数的函数编程实践

在定义函数时声明了参数,而在调用函数时没有指定参数或是少指定了参数,就会出现缺少参数的警告。在PHP中,支持函数的默认方式调用,即为参数指定一个默认值。在调用函数时,如果没有指定参数的值,在函数中会使用参数的默认值。默认值必须是常量表达式,不能是变量,类成员或函数调用,也就是说要是一个确切的值。PHP还允许使用数组和特殊类型NULL作为默认参数。下面我们通过简单的例子进行演示:

<?php
 function student($name="张三", $age=18, $sex="男", $classes=1)
 {
   echo "该学生的姓名:{$name},班级:{$classes}班, 年龄:{$age}, 性别:{$sex} \n";
 }

 student();               //使用默认参数
 student("赵四");           
 student("王五",22);        
 student("翠花",22,"女");    //传入前面三个参数
 student("李白",22,"男",2); //所有参数全覆盖
?>

执行结果如下:

在上面的例子中声明了一个名为student()并带有四个参数的函数,所有的参数都被默认附上初始值,即默认参数。在调用该函数的时候,如果少传后不传参数,参数将使用默认的值。如果用户在调用函数时传值,则使用传入的值。

当调用函数传递参数时,实参和形参是按照顺序对应传递数据的,如果实参数少于形参,则右边的形参不会被传值。当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧,否则可能函数将不会按照预期的情况进行工作,这时候当传入参数少于形参时,会出现缺少参数警告

咱们来个反面教材:下面的函数声明就是函数默认参数不正确的用法。后面两个参数没有被传值,也没有默认值,在调用时出现警告

<?php
 function student($name="张三", $age=18, $sex, $classes){
   echo "该学生的姓名:{$name},班级:{$classes}班, 年龄:{$age}, 性别:{$sex} \n";
 }

 student("赵四");           
?>

执行结果如下:该结果是由在线代码运行工具所得

需要将函数头部的参数列表中,默认参数列在所有没有默认值的参数的后面,该程序就可以正确的执行。我们将其稍作修改即可正常运行:

<?php
 function student($sex, $classes,$name="张三", $age=18)
 {
   echo "该学生的姓名:{$name},班级:{$classes}班, 年龄:{$age}, 性别:{$sex} \n";
 }

 student("男",2,"赵四");           
?>

在上面的代码中,函数 student() 在调用时,前两个参数时必须传值的参数,如果不传之则会出现错误;而后面两个参数是可选的参数,如果不传值则使用默认的值。在PHP的系统函数中有很多这样的函数,前面是必须传值的参数,后面是可选参数。比如我们常用的一些函数:printf(),explode(),mysql_query(),setCookie()等等,这些函数都有必选和可选参数两种

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。