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

1 天前
 florentino

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

3128 次点击
所在节点    PHP
32 条回复
xtreme1
1 天前
这几段代码首先语义上就不等价啊. php 的 async call 是配在框架里面了.
jybox
1 天前
@xtreme1 是等价的,几种语言都是做到框架里的(不可能真的 sleep 30 天)

但我没看出来 PHP 优雅在哪里,感觉都差不多,PHP 稍微短一点是因为没写 timeout 而且省略了 sendEmailActivity 这个对象(显然这不是框架内置的)。
florentino
1 天前
@xtreme1 所以我说感觉嘛,我一眼看过去就知道是啥意思, 不像其他语言我还得去扒拉特殊语
ragnaroks
1 天前
csharp 部分,ExecuteActivityAsync 这个方法的签名设计确实不行,不过很多涉及到时间段的部分总是 TimeSpan 确实也绷不住
XIVN1987
1 天前
上面三个示例都有指定 10s timeout ,,PHP 的版本没指定啊,,这功能不完全一样吧
XIVN1987
1 天前
python 的实现为啥不用继承,,而是使用装饰器??
florentino
1 天前
@XIVN1987 #6 不知道啊 官网的写法
ccc008
1 天前
php 最不爽的就是$符
4ark
1 天前
@ccc008 #8 没有 $ 符,它跟 js 就很像了
abigeater
1 天前
@XIVN1987 PHP 默认没有 timeout 说法,除非使用 swoole 类框架
Smileh
1 天前
😏
cj323
1 天前
只写过 py 和 c#。纯美感上我认同这几个示例里 PHP 看着更舒服点。其他几个除 ruby 外显得有点繁杂。
june4
1 天前
@4ark 什么 js,是 java ,可以说是抄袭了
maigebaoer
1 天前
Java 程序员可以无缝切到 PHP
chendy
1 天前
我也不知道咋回事
看到 PHP 仨字,右手小指就放在了 shift 上,食指放在了 4 上
lscho
1 天前
说实话,php 除了$符号,其他的语法真的足够简洁优雅
urlk
1 天前
没事, java 也支持 $ 做变量开头
est
1 天前
CodeCodeStudy
1 天前
ruby 一大堆的 end
passive
1 天前
要不是因为 cpan ,早就想从 Perl 转到 PHP 。当然,现在只剩 Python 了🐶

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

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

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

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

© 2021 V2EX