全球主机交流论坛备用站

 找回密码
 立即注册

QQ登录

只需一步,快速开始

全球云38元起免备案V2EX搬瓦工VPS
SEO查询超级PING网站测速
Virmach特价鸡乌云漏洞吾爱破解
查看: 264|回复: 16

PHP咋个让中间的参数用它的默认值?

[复制链接]

164

主题

313

回帖

1310

积分

金牌会员

Rank: 6Rank: 6

积分
1310
发表于 2025-1-1 23:56:29 | 显示全部楼层 |阅读模式
20230417
本帖最后由 wawos 于 2025-1-2 00:08 编辑
  1. <?php
  2. function zz ($a, $b='ok', $c) echo $a.$b.$c;
  3. zz ('x', NULL, 'z');
  4. ?>

  5. 输出显示: xz

  6. 想要的是显示: xokz
复制代码
MJJ,你的签名掉了~~~
回复

使用道具 举报

299

主题

2179

回帖

6595

积分

论坛元老

Rank: 8Rank: 8

积分
6595
发表于 2025-1-2 00:03:53 | 显示全部楼层
不说php,一般的语言都不支持.
你可以省略,但不可以传NULL.
它是有意义的.比如函数体内需要判断$b为空.

MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

164

主题

313

回帖

1310

积分

金牌会员

Rank: 6Rank: 6

积分
1310
 楼主| 发表于 2025-1-2 00:07:04 | 显示全部楼层
奧巴马 发表于 2025-1-2 00:03
不说php,一般的语言都不支持.
你可以省略,但不可以传NULL.
它是有意义的.比如函数体内需要判断$b为空.


C++, 易语言都支持啊, 可以中间参数不写: zz ('x', , 'z');  $b就会是 ok

但是php中间参数不写的话报错, 即使写null也会把$b变成null了

想的是上面输出: xokz
MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

1

主题

161

回帖

551

积分

高级会员

Rank: 4

积分
551
发表于 2025-1-2 00:03:00 | 显示全部楼层
你再加个判断为空或者空串再给个默认值,别的语言是给你参考不是直接拿来用的
MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

24

主题

445

回帖

1520

积分

金牌会员

Rank: 6Rank: 6

积分
1520
发表于 2025-1-2 00:10:34 | 显示全部楼层
带默认值的,一般都需要放置在最后,$c也设置一个默认值,如$c=''就可以了吧
MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

64

主题

119

回帖

554

积分

高级会员

Rank: 4

积分
554
发表于 2025-1-2 01:13:52 | 显示全部楼层
wawos 发表于 2025-1-2 00:07
C++, 易语言都支持啊, 可以中间参数不写: zz ('x', , 'z');  $b就会是 ok

但是php中间参数不写的话报错, ...

C++, 易语言都支持,那你就去用C++, 易语言
MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

0

主题

110

回帖

434

积分

中级会员

Rank: 3Rank: 3

积分
434
发表于 2025-1-2 01:33:27 | 显示全部楼层
本帖最后由 cmcc-edu 于 2025-1-2 01:50 编辑

直接给你gpt的问答

1212.jpg (22.85 KB, 下载次数: 0)

在 PHP 中,函数参数的默认值必须出现在没有默认值的参数之后。换句话说,像这样定义的函数是无效的:

  1. function zz($a, $b='ok', $c)
复制代码


这是因为 $b 有默认值 'ok',但是它被放在了 $c 之前,而 $c 没有默认值。这会导致 PHP 报错。


解决方法
可以通过调整参数的顺序来修复这个问题,确保默认值的参数在没有默认值的参数之后。你可以将 $c 放在 $b 之前,并为 $b 提供默认值。调整后的代码如下:


  1. function zz($a, $c, $b='ok') {
  2.     echo $a . $b . $c;
  3. }
  4. zz('x', 'z');
复制代码


解释:

1、在这个版本中,$a 和 $c 是必须传入的参数,$b 是可选的,默认值为 'ok'。
2、在调用 zz('x', 'z') 时,$a 被赋值为 'x',$c 被赋值为 'z',而 $b 使用默认值 'ok'。
这样,输出就会是你想要的 xokz
MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

0

主题

87

回帖

338

积分

中级会员

Rank: 3Rank: 3

积分
338
发表于 2025-1-2 00:07:00 | 显示全部楼层
如果是php8的话, 可以这么用: zz ('aaaa', c: 'ccccccc')
MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

13

主题

415

回帖

1203

积分

金牌会员

Rank: 6Rank: 6

积分
1203
发表于 2025-1-2 01:46:04 | 显示全部楼层
改一下就好了

  1. function zz($a, $b, $c) {
  2.     if ($b === NULL) {
  3.         $b = 'ok';
  4.     }
  5.     echo $a . $b . $c;
  6. }

  7. zz('x', NULL, 'z');
复制代码
MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

0

主题

3

回帖

12

积分

新手上路

Rank: 1

积分
12
发表于 2025-1-2 08:49:24 | 显示全部楼层
cmcc-edu 发表于 2025-1-2 01:46
直接给你gpt的问答

那这样可以吗 function zz($a, $b='ok', $c='yes')

后面2个都是可以省略有默认值的参数,

可以运行时第二个参数用它的默认值,  第三个$c用自己传入的
ywjdlq 发表于 2025-1-2 08:49
如果是php8的话, 可以这么用: zz ('aaaa', c: 'ccccccc')

php8可以?  有这种写法官方说明吗
MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

展开

QQ|Archiver|手机版|小黑屋|全球主机交流论坛备用站

GMT+8, 2025-1-24 04:52 , Processed in 0.046384 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表