php函数所需参数混淆

2024-02-07

我正在寻找 a 的确切类型Required Parameter在 PHP 函数签名中

仅使用 NULL 初始化参数是否使其成为可选参数? IE

function foo($optional=NULL, $OptionalOrRequired="Optional Or Required", $required){}

我对第二个参数感到困惑,它是必需参数还是可选参数?

UPDATE

我在用reflection获取函数的所有必需参数

public function getPlayer($params=3, $c){}
// results
$reflection->getNumberOfParameters()            ->   2
$reflection->getNumberOfRequiredParameters()    ->   2 // it should be one

public function getPlayer($params=3, $c, $x=NULL)
// results
$reflection->getNumberOfParameters()            ->   3
$reflection->getNumberOfRequiredParameters()    ->   2

当我得到一个答案时,默认值出现在必需的之前,这是否是反射函数返回必需参数的错误计数的原因?

Thanks


“可选”参数只是具有默认值的参数,无论该值是null, false、字符串(等)并不重要 - 如果函数参数有默认值,那么它是可选的。

但是,在必需参数之前添加可选参数是没有意义的,因为您必须为前面的参数提供一些值(即使它是null)为了“到达”所需的参数 - 因此最后一个“必需”参数之前的所有参数实际上都是必需的。

一些例子:

// Bad
function bad($optional = 'literally anything', $required) {}

bad('required arg');              // This breaks - 'missing argument 2'
bad('something', 'required arg'); // This works - both parameters are needed

// Good
function($required, $optional = 'literally anything') {}

good('required arg');              // This works just fine, last argument has a default
good('required arg', 'something'); // Also works fine, overrides 'literally anything'

更新回复:反思

如上所述,将“可选”参数放在必需参数之前实际上使该“可选”参数成为必需的,因为必须为其给出一个值才能满足方法签名。

例如,如果第一个参数有默认值而第二个参数没有(就像在bad上面的函数),我们需要传递第二个参数,所以我们也需要传递第一个参数,所以两者都是“必需的”。如果后续参数具有默认值,则仍然只需要前 2 个参数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php函数所需参数混淆 的相关文章

  • 如何组织和管理ACL?

    采取Zend ACL http framework zend com manual en zend acl html作为我的例子 我想知道应该如何为项目组织它 当然 这个例子非常漂亮和简洁 但真实的网站要复杂得多 acl new Zend
  • 将文件从 Dropbox 下载到服务器

    我想从 Dropbox 下载文件 并需要代表 Dropbox 用户将其保留在我的服务器中 我尝试使用curl 和file get contents 但未能成功 我需要使用 dropbox 的任何 api 方法吗 我可以从浏览器下载该文件 但
  • 无法连接到 SMTP 服务器

    我有一个支持邮件的服务器 比如说example com 我配置了服务器并通过cpanel添加了MX记录 这样我就可以通过outlook com有地址 email protected cdn cgi l email protection MX
  • 从 CSV 到 MySQL 的换行问题

    我正在将 csv 文件导入 MySQL 除了文件中的换行符之外 一切正常 我的 csv 行之一如下所示 42 E A R Classic Earplugs ear images ear classic jpg 5 Proven size s
  • PHP 不使用“json_decode()”转换 JSON

    我有一段非常简单的代码 pc1 POST post code1 pc2 POST post code2 url http maps google com maps nav q from pc1 20to pc2 url data file
  • 用于解析差异的 PHP 类

    我正在编写一个 PHP 脚本 需要解释 Git 创建的 Diff 文件 如果我想解析 Diff 文件并基本上以完全不同的格式打印它 我应该如何进行 我遇到过Text DiffPEAR 库 但该库仅创建 Diff 本身 或者更确切地说 它只需
  • 如何在购物车中显示自定义属性(Magento)

    我尝试了很多东西 但没有一个起作用 我想我可以在产品页面上获取自定义属性 但我想知道 如何在购物车页面中获取它们 属性只是简单的文字 item gt getProduct gt load 将从数据库重新加载所有产品数据 虽然这可行 但请记住
  • PHP 中的数组按值排序并维护索引关联

    我有一个数组 array array john gt 2 adam gt 3 ben gt 10 tim gt 1 我已经尝试了 PHP 的各种函数来实现这个数组结构 array array tim gt 1 john gt 2 adam
  • 如何在自动完成表单的脚本中获取 json 文件的多个值

    拜托 我是 php 初学者 我想使用像这样的 json 编码的数组 http stegonia fr autocomplete index2 php http stegonia fr autocomplete index2 php 您可以看
  • PHP 中 (int) $_GET['page'] 是什么意思?

    我试着抬头看 int 但只能找到该函数的文档int 在 PHP 手册中 有人可以向我解释一下上面的代码是做什么的 以及它到底是如何工作的吗 它将 至少尝试 将变量的值转换为整数 如果有字母等 前面会转成0
  • 通过 Amazon SQS 将压缩文本从 PHP 发送到 NodeJS

    我似乎一直坚持通过 Amazon SQS 将压缩消息从 PHP 发送到 NodeJS 在 PHP 方面我有 SQS gt sendMessage Array QueueUrl gt queueUrl MessageBody gt artic
  • 在javascript中通过window.location传递数据

    我试图通过 window location 传递数据 数据在 del id img album 中可用 我想通过 window location 发送多个值 window location save php type deldownload
  • 用于验证网络路径的正则表达式 PHP、jQuery、JavaScript、Ruby

    尝试找出用于验证网络路径的正则表达式 即 comp xyz or comp or comp x y z storage或者所有部分都更长的东西 但希望能够传达其要点 我目前拥有的是一个简单的输入字段 用户可以通过它传递信息 事情是我不希望他
  • 将 Unicode 字符转换为等效的 ASCII 字符

    为了索引和搜索的目的 我需要 展平 一些 Unicode 字符串 例如 我需要转换G the 转换为 ASCII 最后两个字符在 ASCII 中没有紧密的表示 因此可以完全丢弃它们 所以我的期望是 echo iconv UTF 8 ASCI
  • Laravel 5.1 date_format 验证允许两种格式

    我对传入的 POST 请求使用以下日期验证 trep txn date gt date format Y m d H i s u 这只允许这种日期 即 2012 01 21 15 59 44 8 我还想允许没有时间的日期 例如2012 01
  • laravel 模型保存后、保存前等回调

    Laravel 中是否有回调 例如 afterSave beforeSave etc 我进行了搜索 但一无所获 如果没有这样的事情 实施它的最佳方法是什么 Thanks 实现保存前后回调以扩展的最佳方法save 功能 这是一个简单的例子 c
  • 将日期时间舍入到最后一小时

    我试图寻找这个 但我找不到我想做的事情的好例子 我在 MySQL 数据库中得到了日期时间值 当使用该值时必须向下舍入 例如 所有这些值 2013 04 20 07 14 422013 04 20 07 19 512013 04 20 07
  • php laravel Blade 模板不渲染

    我正在尝试使用 Laravel 和 twitter bootstrap 设置一个基本页面 我安装了 Laravel 并获得了通用的 你在这里 或 w e 图像 这样看起来很闪亮 对于 twitter bootstrap 我在 public
  • 展平数组:保持索引、值等于数组中的位置

    我在尝试以特定方式展平数组时遇到了一些麻烦 这里有一个print r我想要展平的数组的视图 Array 1 gt Array 8 gt 1 9 gt 2 10 gt Array 15 gt Array 22 gt 1
  • 将 rel="nofollow" 添加到 WordPress 帖子中的所有链接

    我想将 rel nofollow 添加到我的 WordPress 帖子中的所有链接 并且我希望能够拥有一个不会获得 nofollow 的链接列表 我已经尝试了很多 但我无法正确完成 因为我真的不能很好地理解正则表达式 所以我有字符串 tex

随机推荐