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

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

  •  
  •   florentino · 21 小时 6 分钟前 · 2540 次点击

    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 的心智负担好小啊

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

    但我没看出来 PHP 优雅在哪里,感觉都差不多,PHP 稍微短一点是因为没写 timeout 而且省略了 sendEmailActivity 这个对象(显然这不是框架内置的)。
    florentino
        3
    florentino  
    OP
       20 小时 47 分钟前
    @xtreme1 所以我说感觉嘛,我一眼看过去就知道是啥意思, 不像其他语言我还得去扒拉特殊语
    ragnaroks
        4
    ragnaroks  
       20 小时 42 分钟前
    csharp 部分,ExecuteActivityAsync 这个方法的签名设计确实不行,不过很多涉及到时间段的部分总是 TimeSpan 确实也绷不住
    XIVN1987
        5
    XIVN1987  
       19 小时 45 分钟前
    上面三个示例都有指定 10s timeout ,,PHP 的版本没指定啊,,这功能不完全一样吧
    XIVN1987
        6
    XIVN1987  
       19 小时 43 分钟前
    python 的实现为啥不用继承,,而是使用装饰器??
    florentino
        7
    florentino  
    OP
       19 小时 41 分钟前
    @XIVN1987 #6 不知道啊 官网的写法
    ccc008
        8
    ccc008  
       19 小时 37 分钟前   ❤️ 1
    php 最不爽的就是$符
    4ark
        9
    4ark  
       19 小时 34 分钟前
    @ccc008 #8 没有 $ 符,它跟 js 就很像了
    abigeater
        10
    abigeater  
       19 小时 24 分钟前
    @XIVN1987 PHP 默认没有 timeout 说法,除非使用 swoole 类框架
    Smileh
        11
    Smileh  
       19 小时 23 分钟前
    😏
    cj323
        12
    cj323  
       19 小时 22 分钟前 via Android
    只写过 py 和 c#。纯美感上我认同这几个示例里 PHP 看着更舒服点。其他几个除 ruby 外显得有点繁杂。
    june4
        13
    june4  
       19 小时 12 分钟前
    @4ark 什么 js,是 java ,可以说是抄袭了
    maigebaoer
        14
    maigebaoer  
       19 小时 7 分钟前 via Android
    Java 程序员可以无缝切到 PHP
    chendy
        15
    chendy  
       19 小时 2 分钟前   ❤️ 2
    我也不知道咋回事
    看到 PHP 仨字,右手小指就放在了 shift 上,食指放在了 4 上
    lscho
        16
    lscho  
       18 小时 59 分钟前
    说实话,php 除了$符号,其他的语法真的足够简洁优雅
    urlk
        17
    urlk  
       18 小时 58 分钟前
    没事, java 也支持 $ 做变量开头
    est
        18
    est  
       18 小时 57 分钟前
    CodeCodeStudy
        19
    CodeCodeStudy  
       18 小时 57 分钟前
    ruby 一大堆的 end
    passive
        20
    passive  
       18 小时 54 分钟前 via Android
    要不是因为 cpan ,早就想从 Perl 转到 PHP 。当然,现在只剩 Python 了🐶
    x86
        21
    x86  
       18 小时 45 分钟前
    @chendy #15 右手小拇指;键
    lvsp95
        22
    lvsp95  
       18 小时 42 分钟前
    @maigebaoer #12 从 PHP 切到 Java 也很简单
    4ark
        23
    4ark  
       18 小时 39 分钟前
    @june4 #13 也没毛病,毕竟 js 也是抄的 java
    liKeYunKeji
        24
    liKeYunKeji  
       18 小时 15 分钟前
    php\javascript\java 都很相似。
    jimmzhou
        25
    jimmzhou  
       18 小时 8 分钟前
    好多年没写 php 了 看到 php 的代码 感觉好亲切
    wogogoing
        26
    wogogoing  
    PRO
       17 小时 45 分钟前
    op 怎么没把 Go 的贴出来呀。哈哈哈。
    florentino
        27
    florentino  
    OP
       17 小时 43 分钟前
    @wogogoing 因为 go 我也能看懂
    florentino
        28
    florentino  
    OP
       17 小时 42 分钟前
    @ccc008 $符号我一看就知道是变量,跟 shell 一样
    wogogoing
        29
    wogogoing  
    PRO
       17 小时 39 分钟前
    @florentino 哈哈哈哈 不错不错
    mx1700
        30
    mx1700  
       4 分钟前
    看到 PHP 就感觉到左手小拇指有点抽筋
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2833 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 03:03 · PVG 11:03 · LAX 19:03 · JFK 22:03
    ♥ Do have faith in what you're doing.