V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
florentino
V2EX  ›  PHP

完蛋了,为什么我感觉 PHP 的语法这么优雅呢

  •  
  •   florentino · 1 天前 · 2963 次点击

    temporal 官网示例

    python:

    @workflow.defn
    class SleepForDaysWorkflow:
        # Send an email every 30 days, for the year
        @workflow.run
        async def run(self) -> None:
            for i in range(12):
                # Activities have built-in support for timeouts and retries!
                await workflow.execute_activity(
                    send_email,
                    start_to_close_timeout=timedelta(seconds=10),
                )
    
                # Sleep for 30 days (yes, really)!
                await workflow.sleep(timedelta(days=30))
    

    ruby:

    
    # Send an email every 30 days, for the year
    class SleepForDaysWorkflow < Temporalio::Workflow::Definition
      def execute
        12.times do
          # Activities have built-in support for timeouts and retries!
          Temporalio::Workflow.execute_activity(
            SendEmailActivity,
            start_to_close_timeout: 10
          )
    
          # Sleep for 30 days (yes, really)!
          Temporalio::Workflow.sleep(30 * 24 * 60 * 60)
        end
      end
    end
    

    C#:

    [Workflow]
    public class SleepForDaysWorkflow
    {
        // Send an email every 30 days, for the year
        [WorkflowRun]
        public async Task RunAsync()
        {
            for (int i = 0; i < 12; i++)
            {
                // Activities have built-in support for timeouts and retries!
                await Workflow.ExecuteActivityAsync(
                    (Activities act) => act.SendEmail(),
                    new() { StartToCloseTimeout = TimeSpan.FromSeconds(10) });
    
                // Sleep for 30 days (yes, really)!
                await Workflow.DelayAsync(TimeSpan.FromDays(30));
            }
        }
    }
    

    PHP:

    class SleepForDaysWorkflow implements SleepForDaysWorkflowInterface
    {
      // Send an email every 30 days.
      public function sleepForDays(): void
      {
          for ($i = 0; $i < 12; $i++) {
              // Activities have timeouts, and will be retried by default!
              $this->sendEmailActivity->sendEmail();
    
              // Sleep for 30 days (yes, really)!
              Workflow::sleep(30 * 24 * 60 * 60)
          }
      }
    }
    

    感觉对于 java 程序员 php 的心智负担好小啊

    32 条回复    2025-12-06 12:23:29 +08:00
    xtreme1
        1
    xtreme1  
       1 天前
    这几段代码首先语义上就不等价啊. php 的 async call 是配在框架里面了.
    jybox
        2
    jybox  
       1 天前
    @xtreme1 是等价的,几种语言都是做到框架里的(不可能真的 sleep 30 天)

    但我没看出来 PHP 优雅在哪里,感觉都差不多,PHP 稍微短一点是因为没写 timeout 而且省略了 sendEmailActivity 这个对象(显然这不是框架内置的)。
    florentino
        3
    florentino  
    OP
       1 天前
    @xtreme1 所以我说感觉嘛,我一眼看过去就知道是啥意思, 不像其他语言我还得去扒拉特殊语
    ragnaroks
        4
    ragnaroks  
       1 天前
    csharp 部分,ExecuteActivityAsync 这个方法的签名设计确实不行,不过很多涉及到时间段的部分总是 TimeSpan 确实也绷不住
    XIVN1987
        5
    XIVN1987  
       1 天前
    上面三个示例都有指定 10s timeout ,,PHP 的版本没指定啊,,这功能不完全一样吧
    XIVN1987
        6
    XIVN1987  
       1 天前
    python 的实现为啥不用继承,,而是使用装饰器??
    florentino
        7
    florentino  
    OP
       1 天前
    @XIVN1987 #6 不知道啊 官网的写法
    ccc008
        8
    ccc008  
       1 天前   ❤️ 1
    php 最不爽的就是$符
    4ark
        9
    4ark  
       1 天前
    @ccc008 #8 没有 $ 符,它跟 js 就很像了
    abigeater
        10
    abigeater  
       1 天前
    @XIVN1987 PHP 默认没有 timeout 说法,除非使用 swoole 类框架
    Smileh
        11
    Smileh  
       1 天前
    😏
    cj323
        12
    cj323  
       1 天前 via Android
    只写过 py 和 c#。纯美感上我认同这几个示例里 PHP 看着更舒服点。其他几个除 ruby 外显得有点繁杂。
    june4
        13
    june4  
       1 天前
    @4ark 什么 js,是 java ,可以说是抄袭了
    maigebaoer
        14
    maigebaoer  
       1 天前 via Android
    Java 程序员可以无缝切到 PHP
    chendy
        15
    chendy  
       1 天前   ❤️ 3
    我也不知道咋回事
    看到 PHP 仨字,右手小指就放在了 shift 上,食指放在了 4 上
    lscho
        16
    lscho  
       1 天前
    说实话,php 除了$符号,其他的语法真的足够简洁优雅
    urlk
        17
    urlk  
       1 天前
    没事, java 也支持 $ 做变量开头
    est
        18
    est  
       1 天前
    CodeCodeStudy
        19
    CodeCodeStudy  
       1 天前
    ruby 一大堆的 end
    passive
        20
    passive  
       1 天前 via Android
    要不是因为 cpan ,早就想从 Perl 转到 PHP 。当然,现在只剩 Python 了🐶
    x86
        21
    x86  
       1 天前
    @chendy #15 右手小拇指;键
    lvsp95
        22
    lvsp95  
       1 天前
    @maigebaoer #12 从 PHP 切到 Java 也很简单
    4ark
        23
    4ark  
       1 天前
    @june4 #13 也没毛病,毕竟 js 也是抄的 java
    liKeYunKeji
        24
    liKeYunKeji  
       1 天前
    php\javascript\java 都很相似。
    jimmzhou
        25
    jimmzhou  
       1 天前
    好多年没写 php 了 看到 php 的代码 感觉好亲切
    wogogoing
        26
    wogogoing  
    PRO
       1 天前
    op 怎么没把 Go 的贴出来呀。哈哈哈。
    florentino
        27
    florentino  
    OP
       1 天前
    @wogogoing 因为 go 我也能看懂
    florentino
        28
    florentino  
    OP
       1 天前
    @ccc008 $符号我一看就知道是变量,跟 shell 一样
    wogogoing
        29
    wogogoing  
    PRO
       1 天前
    @florentino 哈哈哈哈 不错不错
    mx1700
        30
    mx1700  
       10 小时 31 分钟前
    看到 PHP 就感觉到左手小拇指有点抽筋
    NewYear
        31
    NewYear  
       9 小时 32 分钟前
    PHP 最大的问题不是$,而是设计一塌糊涂,例如我要处理一个字符串,我要把这个字符串放在第几个参数?每个处理函数还不一样。

    这导致要单独记忆,很多人都是懂多种语言,没谁想单独为某个语言记一些垃圾玩意。

    另外就是 JS 这种可以链式调用,自动补全啥的都很优秀,php 这种……语法也不优美,函数套函数,函数套函数,眼睛都看不清楚引号和括号是哪个函数的(当年我写 vb 也有这个问题,烦)


    这也是为什么很多人说别学 C#,学了之后学不会其他语言了,因为设计是真的好,由奢入俭难。
    realpg
        32
    realpg  
    PRO
       9 小时 6 分钟前
    @urlk #17
    但是 java 不支持$$
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2745 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 13:29 · PVG 21:29 · LAX 05:29 · JFK 08:29
    ♥ Do have faith in what you're doing.