https://php.watch/versions/8.5/pipe-operator
$result = "Hello World"
|> strtoupper(...)
|> str_shuffle(...)
|> trim(...);
同样语法 JS 那边卡了很久,PHP 直接上了。
![]() |
1
junkk 1 天前
相当于把 str 对象化然后链式调用?
只能算是加了个语法糖吧? |
![]() |
2
dragondove 1 天前
可能因为 JS 有 oop ,oop 链式调用可以达到相同的效果,只不过外部扩展需要有 extension method 之类的特性,extension method 可以覆盖 pipe 的功能。
|
![]() |
3
dragondove 1 天前
@junkk 是语法糖,但不是对象化,a |> x(...) |> y(...) 相当于 y(x(a)),用 pipe 可读性会好一点,编写的时候也会更符合人类思维(先用 x 处理再用 y 处理)
|
![]() |
4
luziafy 1 天前
相当于管道吧
|
![]() |
5
junkk 1 天前
|
![]() |
6
ooTwToo 1 天前
相当于 Java 里的 Builders ?
|
7
cbythe434 1 天前
逐渐变成 perl
|
![]() |
8
crocoBaby 1 天前
JS 也有啊
|
9
dongisking 1 天前 ![]() |>
这语法果然只有 php 才想的出来... |
10
way2create 1 天前
看着有点丑陋
|
![]() |
11
635925926 1 天前
java 里的 Stream ?
|
![]() |
12
xiangyuecn 1 天前 ![]() 满屏幕的$,这样写至少少一半的$,也算是 php 特色了
|
![]() |
13
mandex 1 天前
@dongisking 不是哦,很早之前 JS 就说要用|>了,但是现在还没有搞好。https://github.com/tc39/proposal-pipeline-operator
|
14
aloxaf 1 天前 ![]() @dongisking 这语法在函数式语言里常见的很……
|
15
sky3hao9 1 天前
PHP 还活着也属于奇迹
|
![]() |
16
zjsxwc 1 天前
就是把类似 C 语言的面向过程的函数,也能和面向对象的链式调用一样使用。
$pureData |> c_function1() |> c_function2() |> c_function3(); $obj->method1()->method2()->method3(); |
17
zhengwenk 1 天前
这语法也太丑了
|
![]() |
18
Steaven 1 天前 ![]() 我最早在 elixir 使用这个语法,现在 php 也增加了,确实是可以👍
|
![]() |
19
liuliuliuliu PRO 这范例里的两个系统函数:strtoupper 和 str_shuffle 是什么命名规则?
|
20
Configuration 1 天前
|
![]() |
21
Tokin 1 天前
|> 怎么这么奇怪的语法
|
![]() |
22
Ashore 1 天前 via Android ![]() PHP 是世界上最好的语言。
|
![]() |
23
panlatent 1 天前
@liuliuliuliu 这就是 PHP 早期混乱、缺乏设计的活化石,没有规则
新特性就叫管道操作符,结合 (...) 语法更为直观。这个符号并不丑陋,启用连字的话还是挺直观的。 没有什么魔法,只是让 PHP 程序员更舒服而已,仅此。 |
![]() |
25
lululau 1 天前
|
26
mx1700 1 天前 via Android
|> 是管道语法的主流设计啊,怎么还有人说什么丑,奇怪,PHP 才想得出。。。
|
![]() |
27
Smileh 1 天前 ![]() @dongisking #9
菜就多练 少发帖 |
28
FalconD 1 天前 ![]() @dongisking 猜你想看:
````haskell (<$>) :: Functor f => (a -> b) -> f a -> f b (<*>) :: Applicative f => f (a -> b) -> f a -> f b (<|>) :: Alternative f => f a -> f a -> f a (>>=) :: Monad m => m a -> (a -> m b) -> m b (>=>) :: Monad m => (a -> m b) -> (b -> m c) -> a -> m c (^>>) :: Arrow a => (b -> c) -> a c d -> a b d (<+>) :: ArrowPlus a => a b c -> a b c -> a b c ```` |
29
jmtung 1 天前 ![]() @xiangyuecn 陈年老梗,每敲一个变量获得 1$收入
|
30
oxygenkun101 1 天前
php8 之后的更新挺现代的,这管道确实改善 quality of life
|
![]() |
31
eratpfus7 1 天前
还在 php
|
![]() |
32
tt67wq 1 天前
Elixir 也是这样的
|
33
ben1024 1 天前
oh
|
![]() |
34
DOLLOR 1 天前
真希望 JS 也能早点用上,实在受够了 a(b(c(d)))这样的套娃代码了🐶
|
![]() |
35
dajj 1 天前
稀奇古怪的玩意
|
![]() |
36
kxg3030 1 天前
php 的社区是最听劝的社区 php 非常不错~
|
37
keer 1 天前
这语法还不直观吗?
将上一步的结果通过管道(|)的方式,重定向(>)到下一步处理函数进行计算。 |
38
akiyamamio 1 天前
|
![]() |
39
fkdtz 1 天前
至少能够实现开发效率和可读性这两方面的提升,还是不错的
|
![]() |
41
kwokky 1 天前
cool
|
![]() |
42
TerranC 1 天前 via iPhone
好像对于 bcadd bcsub 之类的总算不用一层套一层
|
43
newtype0092 1 天前
之前看到了,确实有些地方会方便一些。
有个限制比较难受就是只能用 只有第一个参数是 require 的 callable 。 (A major limitation of the pipe operator is that all the callables in the chain must accept only one required parameter.) 这样的话像最常用的 array_map 之类一通嵌套处理的场景,想用 pipe 的方式还得包在 closure 里。 |
![]() |
45
wangtian2020 1 天前
JavaScript 你崛起吧
|
46
ywcjxf1515 1 天前 via Android
,
|
47
chenqh 1 天前
python 居然没有 pipe 这个操作符
|
![]() |
48
w3cll 1 天前
php 的异步也在推进了
https://github.com/true-async/php-async |
49
WorseIsBetter 1 天前
|
50
newtype0092 1 天前
@WorseIsBetter 大佬想的挺超前的,我看了 v1 版本 20 年就提了,不过投票差了一点没过,这次加了 pipe 的 case 不知道能不能过。
|
51
jhdxr 1 天前
|
52
mshadow 23 小时 14 分钟前 via Android
哎,php 最大的问题不是糖不够,而是糖太多了。fpm 虽然拉低了入门门槛,但严重制约了 php 的上限,为啥死活不改啊?
|
![]() |
53
lyxxxh2 23 小时 14 分钟前
确实很不错的功能。
php 数组处理太蛋疼了, 要么定义多个变量,要么嵌套。 我都是转 laravel collection 对象 $result = collection(array) ->filter(fn() ...) ->map(fn() ..) 而有了这个之后,我不再需要 laravecollectionl ,甚至更复杂的操作。 $result = array |> array_filter(fn($item) => ) |> array_map .. |> fn(..) |
![]() |
54
akjarjash 23 小时 2 分钟前
PHP:
注解:[] 管道:|> 都很独特🤣 |
57
jhdxr 19 小时 2 分钟前
@mshadow 因为这东西需要深入理解才能改。改改语法糖啥的社群理解起来容易,RFC 容易通过,改起来也**相对**容易。至于底层的那些说实话 nikita 跑路后 dmitry 发个邮件都没啥能真正回应的人。。。
|
![]() |
58
2024 18 小时 30 分钟前
关注下 https://github.com/php-any/origami GO 版本的 PHP, GUI 都能写
|