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