PHP: 函数的参数 您所在的位置:网站首页 php函数大全怎么记忆 PHP: 函数的参数

PHP: 函数的参数

2024-07-11 05:08| 来源: 网络整理| 查看: 265

函数的参数

通过参数列表可以传递信息到函数,即以逗号作为分隔符的表达式列表。函数在实际调用之前,值参数是从左向右求值的(及早求值)。

PHP 支持按值传递参数(默认),通过引用传递参数 以及 默认参数。也支持 可变长度参数列表 和 命名参数。

示例 #1 向函数传递数组

从 PHP 8.0.0 开始,函数参数列表可以包含一个尾部的逗号,这个逗号将被忽略。这在参数列表较长或包含较长的变量名的情况下特别有用,这样可以方便地垂直列出参数。

示例 #2 函数参数使用尾部逗号

通过引用传递参数

默认情况下,函数参数通过值传递(因而即使在函数内部改变参数的值,它并不会改变函数外部的值)。如果希望允许函数修改它的参数值,必须通过引用传递参数。

如果想要函数的一个参数总是通过引用传递,可以在函数定义中该参数的前面加上符号 &:

示例 #3 用引用传递函数参数

默认参数的值

函数可以使用类似分配变量的语法定义参数的默认值。仅当参数未指定时才使用默认值;需要注意的是传递 null 不会分配默认值。

示例 #4 在函数中使用默认参数

以上示例会输出:

Making a cup of cappuccino. Making a cup of . Making a cup of espresso.

默认参数值可以是标量值、array、特殊类型 null,以及从 PHP 8.1.0 开始,使用 new ClassName() 语法的对象。

示例 #5 使用非标量类型作为默认参数

以上示例会输出:

Making a cup of cappuccino with hands. Making a cup of cappuccino, lavazza with teapot.

示例 #6 使用对象作为默认值(自 PHP 8.1.0 起)

以上示例会输出:

Making coffee. Crafting a beautiful coffee just for you.

默认值必须是常量表达式,不能是诸如变量,类成员,或者函数调用等。

注意任何可选参数都应在强制参数之后指定,否则可选参数不能在调用时省略。考虑以下示例:

示例 #7 函数默认参数的不正确用法

以上示例会输出:

Fatal error: Uncaught ArgumentCountError: Too few arguments to function makeyogurt(), 1 passed in example.php on line 42

现在,比较上面的例子和这个例子:

示例 #8 函数默认参数正确的用法

以上示例会输出:

Making a bowl of raspberry yogurt.

自 PHP 8.0.0 起,命名参数可用于跳过多个可选参数。

示例 #9 函数默认参数正确的用法

以上示例会输出:

Making a bowl of raspberry natural yogurt.

自 PHP 8.0.0 起,弃用在可选参数之后声明强制参数。这通常可以通过删除默认值来解决,因为它永远不会被使用。唯一的例外是 Type $param = null 类型的参数,其中默认 null 使得该类型可以隐式为 null。这种做法依然允许,但是推荐使用显式可为 null 类型代替。

示例 #10 强制参数后声明可选参数

注意: 自 PHP 7.1.0 起,省略未指定默认值的参数会原因引发 ArgumentCountError;在此之前的版本会引发警告。

注意: 传引用的参数也可以有默认值。

可变数量的参数列表

PHP 在用户自定义函数中支持可变数量的参数列表。由 ... 语法实现。

包含 ... 的参数,会转换为指定参数变量的一个 array:

示例 #11 使用 ... 来访问变量参数

以上示例会输出:

10

也可以使用 ... 语法来传递 array 或 Traversable 做为参数到函数中:

示例 #12 使用 ... 来传递参数

以上示例会输出:

3 3

你可以在 ... 前指定正常的位置参数。在这种情况下,只有不符合位置参数的尾部参数才会被添加到 ... 生成的数组中。

你也可以在 ... 标记前添加一个 类型声明。如果存在这种情况,那么 ... 捕获的所有参数都必须匹配参数类型。

示例 #13 输入提示的变量参数

以上示例会输出:

3 days Catchable fatal error: Argument 2 passed to total_intervals() must be an instance of DateInterval, null given, called in - on line 14 and defined in - on line 2

最后,你还可以给参数传递 引用变量,通过在 ... 前加上一个 (&) 符号来实现。

命名参数

PHP 8.0.0 开始引入了命名参数作为现有位置参数的扩展。命名参数允许根据参数名而不是参数位置向函数传参。这使得参数的含义自成体系,参数与顺序无关,并允许任意跳过默认值。

命名参数通过在参数名前加上冒号来传递。允许使用保留关键字作为参数名。参数名必须是一个标识符,不允许动态指定。

示例 #14 命名参数的语法

示例 #15 通过位置传参与命名参数的对比

指定参数的传递顺序并不重要。

示例 #16 参数顺序不同的示例(同上例)

命名参数也可以与位置参数相结合使用。此种情况下,命名参数必须在位置参数之后。也可以只指定一个函数的部分可选参数,而不考虑它们的顺序。

示例 #17 命名参数与位置参数结合使用

传递多个相同参数将会导致 Error 异常。

示例 #18 传递多个相同参数将会导致抛出 Error

自 PHP 8.1.0 起,可以在解包参数后面使用命名参数。命名参数不能覆盖已解包的参数。

示例 #19 解包后使用命名参数



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有