PHP 貌似还不支持命名参数?好奇 PHPer 们真的不关心这个特性吗?

2015-10-11 01:24:27 +08:00
 fzinfz
https://wiki.php.net/rfc/named_params
貌似 13 年才提出这个需求?
Proposed for: PHP 5.6 可是现在都 7 了还 Under Discussion ?理由是"this is a very complicated feature I do not wish to spend time finishing it without knowing that we actually want this feature"...

Python 在 06 年就实现了: https://www.python.org/dev/peps/pep-3102/
C#也 10 年实现了: https://msdn.microsoft.com/en-us/library/dd264739.aspx
5609 次点击
所在节点    PHP
34 条回复
lincanbin
2015-10-11 01:28:16 +08:00
php 要是支持强类型与类型声明就更好了,那就可以当 C++写了。
squid157
2015-10-11 01:29:24 +08:00
我也奇怪他们怎么忍受的。我这某老项目,一个破函数,十几个参数, tnnd 。

下面那两个我也是吃惊。。原来 C#在 10 年才有的
orFish
2015-10-11 01:30:39 +08:00
@lincanbin 其实现在是支持的。。。就是有点奇怪
lincanbin
2015-10-11 01:33:02 +08:00
@squid157 把这些参数按 key-value 打包成一个 array 传进去,函数内部就使用这些 array 的元素。
towser
2015-10-11 02:05:12 +08:00
某个特性如果真的那么重要,社区不会忽略群众呼声。
zhengkai
2015-10-11 02:08:19 +08:00
也就多个方括号的事情,在 PHP 里你可以先这么凑合

Foo::bar([
'k1' => 'v1,
'k2' => 'v2',
]);

不是你对某种语言比较熟,就一定要那种语言有的特性在别的语言里也要有,更别说这种语法糖层次的东西,在这种不足道的事情上钻牛角尖,只能停留在用 PHP 写 Java 或者用 PHP 写 C# 歪路上

每种语言都有自己的目的,适用的范围

你们通常管跑到西餐馆去问服务员“你们这么大的饭店怎么连饺子都没有”的人叫什么?
chaegumi
2015-10-11 07:08:59 +08:00
@zhengkai +10086
eoo
2015-10-11 08:41:58 +08:00
@lincanbin PHP7 已经支持了 再等等 不到一个月了
jaguar
2015-10-11 08:56:27 +08:00
就像 v2 一样,简单就是美,为啥 php 一直世界上血统最高贵的语言,就是因为它的简单纯粹
dai269619118
2015-10-11 09:12:56 +08:00
@eoo 早就支持命名空间了 - -
dai269619118
2015-10-11 09:15:18 +08:00
@eoo 我看错 当我没说
jhdxr
2015-10-11 09:57:12 +08:00
一个函数参数太多我觉得本身这个函数就有问题。。。另外现在我觉得完全可以支持这个特性的,参考 6 楼的即可。
```
function foo($a, $b, $c, $d) {
if(func_num_args() === 1) {
extract($a); //security problem? maybe filter first
}
}

foo(1, 2, 3, 4);
foo(['b'=>2,'a'=>1,'d'=>4,'c'=>3]);

```
irgil
2015-10-11 10:13:57 +08:00
@lincanbin php7 已支持
liujiangbei
2015-10-11 10:26:27 +08:00
这个不是支持了嘛?
spacewander
2015-10-11 10:44:57 +08:00
不支持命名参数的语言才是大多数吧?
静态语言就构造出一个类,传进去;动态语言就构造出一个 KV 对。
习惯了就好。
k9982874
2015-10-11 10:51:36 +08:00
个人觉得命名参数才是异类,调个函数还得说明参数是谁的,脱裤子放屁,从左到右顺序传不行么?
halfcoder
2015-10-11 11:07:06 +08:00
“ C++ 貌似还不支持命名参数?好奇 Cpper 们真的不关心这个特性吗?"

另外吐槽一下什么叫“现在都 7 了”, 5.6 下个版本就是 7 了好么……
zhs227
2015-10-11 12:00:35 +08:00
因为 PHP 有个万能的数组,所以传入一个数组慢慢取就可以了。

不同的语言有不同的惯用法,这也是经常让穿梭于各种语言中的人感到困惑的地方,最好的办法就是多看别人写的代码。
neutrino
2015-10-11 12:48:09 +08:00
有 IDE 提示参数,不用这个功能。。
fzinfz
2015-10-11 13:47:57 +08:00
@lincanbin @zhengkai @spacewander @zhs227 @jhdxr
感谢各位指教~ 我是编程小白,没有想到原来大家都用 array 。。。因为曾经用过一份记得好像蛮出名的开源代码结果某个函数里有十几个参数,而我只需要改变其中的第十几个参数的值而已,从此对 php 有了心理阴影。。。
不过个人还是很喜欢这项特性,毕竟用 array/class 的话要知道 array key/class member 的名字又多了一层。。。

@halfcoder
c/cpp 作为效率第一的语音,牺牲便利性表示很正常
才知道 5.6 的后续版本是 7 。。。一般只用到入门级的 PHP ,上个月看 php 到 7 了吓了一跳。。。无知了>.<

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/227048

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX