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

20 小时 16 分钟前
 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 的心智负担好小啊

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

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