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 条回复
iyaozhen
2015-10-11 14:59:34 +08:00
以前还没注意过, Python 中有时会这样用。

其实个人感觉适用范围比较小,因为函数的有些参数是必须要传的,默认参数的话往后面放,只是有些时候需要更改某个默认参数的话代码写的不够优雅。不过好多框架传参是用数组的。

其实这个特性还是蛮好用的。
icloudnet
2015-10-11 15:02:25 +08:00
@jaguar 你够了, O(∩_∩)O 哈!
viko16
2015-10-11 15:32:27 +08:00
养成“常用参数排前面”的好习惯就好
shiny
2015-10-11 15:51:39 +08:00
Bad Code Smells 里谈到过一种坏味道: Long Parameter List
如果觉得参数列表太长不好改,那说明你需要重构你的程序了,而不是依靠语法新特性。
shiny
2015-10-11 15:52:27 +08:00
如果只是为了参数更直观、可读性更好考虑,这种特性还是很不错的。
fzinfz
2015-10-11 16:06:45 +08:00
@shiny 主要是我用 PHP 一般都是调用或改现成的>.<

借用一段 Q&A 回复这个问题吧,来源: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4172.htm

Objection #1: This feature caters to having functions with many parameters - a programming style that should be discouraged.

We agree that having functions with many parameters should be discouraged. However, the reality is that many legacy APIs that programmers have to work with and will have to work with for a long time, have functions with many arguments, and making it easier to deal with such functions would solve a real problem and be materially useful.

More importantly, however, this feature has a lot of value for functions with few arguments, too. Even for functions with few arguments, when reading a call site one has relatively little information about the roles of the arguments. Having names of arguments present would make call sites more readable, regardless of the number of arguments.
skydiver
2015-10-11 16:16:49 +08:00
生产一个参数对象,传对象进去。
参数太多本身就是有问题
grzhan
2015-10-11 17:51:27 +08:00
只是有些框架的函数参数设计不是特别好,因此如果这时候可以用命名参数还是比较方便的……
squid157
2015-10-11 21:51:26 +08:00
@fzinfz

+1
坑逼代码又不是我写的,出了问题看着快瞎了。
halfcoder
2015-10-11 22:51:57 +08:00
@fzinfz C++是编译型语言,只要编译器做得好,命名参数并不是问题。
其实早就有人提过给 C++加入的命名参数的提案,但是没有通过:
1.在函数声明中的每个参数都必须采用与函数定义中一样的名称
2.一旦使用了关键词参数,在函数定义中的参数名称就不能再改了,否则就会打破用户代码。
这是在《 C++语言的设计与演化》中提到的,强烈推荐这本书,我完全有理由认为每一个程序员都应该读这本书。
semicircle21
2015-10-12 09:17:19 +08:00
OC 在一旁默默不语....
heiyou
2015-10-12 10:47:53 +08:00
一般我写函数,最多 4 个参数。多了感觉别扭,需要重构下。实在没办法, key , value 的方式就是常用的解决方法了。
akstrom
2015-10-12 12:09:55 +08:00
一直在用数组传参,除非是一些很特殊的才会独立开来
fengyqf
2015-10-12 14:36:01 +08:00
参数多的话,用关联数据传参吧,虽然有点蛋疼。
即使新版本的支持,也要等 N 年以后才广泛应用

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

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

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

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

© 2021 V2EX