PHP 是否允许命名参数,以便可以在函数调用中省略可选参数?

2023-12-21

PHP 中是否可以在调用函数/方法时指定命名可选参数,跳过您不想指定的参数(就像在 python 中一样)?

就像是:

function foo($a, $b = '', $c = '') {
    // whatever
}


foo("hello", $c="bar"); // we want $b as the default, but specify $c

PHP 8.0 添加了对命名参数的支持,并接受an RFC https://wiki.php.net/rfc/named_params.

命名参数的传递方式是在值前面加上参数名称前缀,后跟冒号。允许使用保留关键字作为参数名称。参数名称必须是标识符,不允许动态指定。

例如。在示例中仅传递第三个可选参数:

foo(timeout: 3);

在 PHP 8 之前,命名参数在 PHP 中是不可能的。从技术上讲,当您致电时foo($timeout=3)它正在评估$timeout=3首先,结果是3并将其作为第一个参数传递给foo()。 PHP 强制执行参数顺序,因此类似的调用需要是foo("", "", $timeout=3)。您还有另外两个选择:

  • 让您的函数采用数组作为参数并检查数组键。我个人觉得这很丑,但它有效并且可读。优点是简单,以后很容易添加新参数。缺点是您的函数的自记录性较差,并且您不会从 IDE 获得太多帮助(自动完成、快速函数参数查找等)。
  • 设置不带参数的函数并向 PHP 询问参数func_get_args() http://php.net/manual/en/function.func-get-args.php或使用... 可变长度参数功能 http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list.new在 PHP 5.6+ 中。根据参数的数量,您可以决定如何处理每个参数。许多 JQuery 函数都会执行类似的操作。这很简单,但对于那些调用函数的人来说可能会感到困惑,因为它也不是自记录的。而且你的论点仍然没有被命名。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 是否允许命名参数,以便可以在函数调用中省略可选参数? 的相关文章

  • 在 PHP 数组定义中显示重复键警告

    下面的代码是否可以得到警告 error reporting E ALL s array a gt 1 a gt 1 var export s 你唯一的希望 除了count 你自己 是你的编辑足够聪明 可以突出显示拼写错误 此屏幕截图来自 P
  • Laravel Eloquent 预加载:加入同一个表两次

    我有一个users表和一个约会桌子 在约会表中 我有两个用户 ID customer id staff id 我想检索所有带有客户姓名和员工姓名的约会 users table id name appointments table id st
  • 获取给定日期时间集的每月第一个星期一

    我需要什么 我有一个特定的日期时间列表 我想获取每个日期时间的第一个星期一 例如 假设给定的日期时间是 2013 07 05 2013 08 05 2013 09 13 etc 我想获得所有这些日期时间的第一个星期一 以便输出结果 2013
  • 内连接 3 个表

    我正在使用 PHP 和 PDO 我需要重新收集连接 3 个表的信息 photos albums 相册照片 该表具有以下结构 photos photo id int path varchar nick varchar date timesta
  • 是否可以在 UML 中可视化一堆函数

    我正在改进一个使用类和函数文件 只是包含各种函数的 php 文件 的内容管理系统 例如 我有一堂课叫Admin以及一个功能文件 其功能包括显示管理员概述 创建新管理员 编辑现有管理员 删除管理员 函数文件使用类并执行 mvc 概念的可视化部
  • Facebook“赞”按钮回调帮助

    我正在使用此代码进行类似 facebook 的回调 问题是 如果我调用 php 脚本 例如 有人可以看到我的 javascript 并运行此页面 甚至可以向其发送垃圾邮件或在没有先点赞的情况下使用它 我的想法是 我想为每个喜欢该页面的用户提
  • Symfony2,如何向表单添加隐藏的日期类型字段?

    我正在尝试以下场景 In myclassType public function buildForm FormBuilder builder array options builder gt add day hidden gt add da
  • use 语句顺序会影响 PHP 中的功能吗?

    我使用 PHP 的命名空间已经有一段时间了 我认为它对我的编程来说是一个很好的补充 今天早上我想知道一些关于use陈述 我想知道顺序是否use影响我的 PHP 代码的功能 根据 PHP net 使用别名引用外部完全限定名称或导入的能力是命名
  • 如何使用 php DOM 获取 内的值?

    我如何使用 php DOM 获取 内的值 这是我的 xml 中的一些代码
  • 在php中获取大于2GB的文件大小的最佳方法?

    我想检查本地驱动器上的文件大小windows OS 但是PHP原生函数filesize 仅当文件大小小于时才有效2GB 大于的文件2GB将返回错误的数字 那么 是否有其他方法来获取大于的文件大小2GB 非常感谢 您始终可以使用系统的文件大小
  • 使用第三方库记录来自 PHP 应用程序的所有 cURL 请求

    好吧 我的 PHP Yii2 应用程序遇到了困难 我需要记录来自应用程序的每个传入和传出请求 传入的请求可以轻松地记录在 PHP 本身中 在引导阶段添加一些处理程序 这很容易 但真正的问题是我正在使用许多第三方库 即 Amazon MWS
  • 在 mysqli 准备好的语句程序风格中获取最后插入的 id 的正确方法是什么?

    我正在使用 mysqli 准备好的语句在表中插入记录 如下所示 link mysqli connect localhost my user my password world check connection if link printf
  • 写入 xml 文件时允许的内存大小已耗尽(尝试分配 4459414 字节)[重复] 67108864 字节

    这个问题在这里已经有答案了 可能的重复 php 中允许的内存大小已耗尽 尝试分配 43148176 字节 33554432 字节 https stackoverflow com questions 415801 allowed memory
  • 错误 #520009 - 帐户受到限制

    我收到 520009 错误 帐户 电子邮件受保护 cdn cgi l email protection被限制 当尝试进行并行付款时 我的代码使用沙箱运行良好 但我切换到实时端点 它开始失败 有问题的帐户是有效的 PayPal 帐户 我使用的
  • 细胞的 fpdf 对齐

    我正在尝试使用生成 PDFfpdf我有一个小问题 我需要有 2 个单元格 如下所示 Address Line 1 Version Address Line 2 1 0 City 06 05 2011 我尝试过使用MultiCell 但没有运
  • PHP 中的异或加密

    我是 Xor 加密的新手 并且在使用以下代码时遇到了一些问题 function xor this string Let s define our key here key magic key Our plaintext ciphertext
  • Laravel,控制器中的 Auth::user()

    Laravel 框架 为什么我无法在 laravel 项目的控制器中使用 Auth user 查看用户是否已登录 Session 是否未连接到控制器 HomeController php public function isauthoriz
  • 使用 Imagick 动态图像创建/Apache 标头

    在将现有的稳定网站转移到新服务器时 我遇到了一些使用 Imagick 动态创建图像的代码的间歇性问题 该代码解析 GET 查询 例如 example com image php ipid 750123 r 0 w 750 h 1000 然后
  • Mysql加密/存储敏感数据,

    我的 PHP 网站有以下内容 启用 SSL 饼干 session set cookie params cookieParams lifetime cookieParams path cookieParams domain secure ht
  • 使用 Swift 邮件程序发送邮件时出现错误 501

随机推荐

  • 使用 LINQ/扩展方法重复字符串[重复]

    这个问题在这里已经有答案了 只是我正在调查的好奇心 问题是 简单地重复 乘法 有人会说 字符串 字符n times 我知道有可枚举 重复为了这个目标 但我试图在没有它的情况下做到这一点 LINQ在这种情况下似乎毫无用处 因为在query l
  • 使用正则表达式提取文件名

    如果我只想匹配fileName i e in C Directory FileName cs 以某种方式忽略之前的一切FileName cs使用正则表达式 我该怎么做 我需要这个用于我正在开发的编译用户界面 无法使用编程语言 因为它只接受正
  • 如何修复 React Native 中的“找不到模块”.../template.config”错误

    我正在尝试使用 React Native 创建一个新应用程序react native init MyApp但我收到了这个错误 Downloading template Copying template error Error Cannot
  • UISearchbar 不区分大小写?

    在表视图中 我设置了 UISearchBar 设置委托并添加协议 当用户点击一个单词时 一切正常 除了 网球 的搜索与 网球 不同 如何使搜索栏成为不区分大小写的 UISearchBar 这是我的代码 我认为所有事情都会发生 void se
  • 在 Visual Studio 中使用 NumPy

    我下载了http pytools codeplex com http pytools codeplex com Visual Studio 的 Python 工具 以便我可以在 Visual Studio 中编写 Python 问题是当我尝
  • python 中文本的 n 元语法

    我之前的更新post https stackoverflow com questions 49064114 extracting n grams from tweets in python 进行一些更改 假设我有 100 条推文 在这些推文
  • Freemarker 内置换行功能

    在我的代码中 我使用 n 作为换行符 有人建议我需要避免 n 因为这对于不同的操作系统 UNIX Windows 和 MAC 来说是不同的 并且每个操作系统都会以不同的方式解释这个字符 虽然我看到了预期的行为 但任何人都可以建议 我们是否有
  • 使用 C# 解析 XLS 文件时出现问题

    好吧 让我们看看我是否能理解这一点 我写了一个程序来解析 Excel 文件 它运行得很好 我使用以下命令进入文件 string FileToConvert Server MapPath App Data CP ARFJN FLAG XLS
  • jquery-autocomplete 插件搜索

    有这个jquery 自动完成 https github com dyve jquery autocomplete插入 它允许您仅搜索确切的字符串 所以我们可以说这是数据 apple is good apple grows on tree t
  • 32 位和 64 位操作系统中的双字节大小

    有什么区别吗double http msdn microsoft com en us library system double aspx当我在 32 位和 64 位环境中运行我的应用程序时的大小 如果我没记错的话 32位环境中的doubl
  • 为多语言 ASP.NET MVC Web 应用程序设置 CurrentCulture 的最佳位置

    对于多语言 ASP NET MVC 3 Web 应用程序 我正在确定Thread CurrentThread CurrentCulture and Thread CurrentThread CurrentUICulture在控制器工厂上如下
  • 如何在 C++ (gcc) 中获得完全限定的函数名称,_排除_返回类型?

    这个问题 https stackoverflow com questions 6151558 displaying fully qualified name of the function描述了如何使用 PRETTY FUNCTION 获取
  • Django-taggit prefetch_相关

    我现在正在构建一个基本的时间记录应用程序 并且有一个使用 django taggit 的待办事项模型 我的 Todo 模型如下所示 class Todo models Model project models ForeignKey Proj
  • Maven 构建与依赖树不同

    我正在使用 Maven 3 构建一个具有 3 层的 java 应用程序 服务器 ejb 和 ui EJB项目依赖于Server项目 UI项目仅依赖于EJB 并为Server传递依赖提供排除 当 UI 项目构建为 war 时 服务器依赖项将被
  • NASM x86 使用 extern printf 打印整数

    我尝试在 x86 程序集中使用 printf 打印整数 对于格式字符串printf fmtstring vals 我已经存储了 d作为 fmtd 然后我将 1 放入 ax 将 2 放入 bx 将它们相加并希望使用调用 printf 打印结果
  • 变量扩展之间的排序

    对于这个非变量示例 int Func1 double Func2 void MyFunc int double int main MyFunc Func1 Func2 没有指定是否Func1 or Func2 首先计算 只是两者都必须在之前
  • R中计算多列并分组

    最后一个问题的答案帮助我理解了dplyr n 但我仍然无法应用于我试图解决的问题 所以 我在这里发布数据和实际问题 数据如下 finalCalledPartyNumber Call Day Call Date Block Answered
  • 如何根据条件附加指令

    我有两个不同的指令 第一个返回带有实时视频的 iframe 第二个返回带有最近视频的 iframe 条件是 如果存在实时内容 则附加实时指令 否则附加最近的视频指令 我尝试过使用普通 html 而不是指令 它可以工作 但是当我放置指令元素时
  • 如何将 byte[] 反序列化为通用对象以在方法调用时进行转换

    我正在研究一个对象加密类 我已经解决了所有问题 但我希望能够使用一种反序列化方法来加密 解密任何对象类型 到目前为止 唯一阻碍我的是反序列化方法 我有返回 type object 的函数 希望返回弱类型对象 只要我在返回值赋值期间转换类型
  • PHP 是否允许命名参数,以便可以在函数调用中省略可选参数?

    PHP 中是否可以在调用函数 方法时指定命名可选参数 跳过您不想指定的参数 就像在 python 中一样 就像是 function foo a b c whatever foo hello c bar we want b as the de