@belin520 #17 说的也是一个优点,改完代码保存至今就能看结果,强类型语言还得编译一下,即使是 go 这种编译速度很快的语言,当项目变复杂/变大之后,编译也很慢。并且有时候如果有人引用了一个奇怪的包,例如只能在 linux 下用,mac 和 win 不能用的包,你就直接编译不了了,但是 php 不会有这个问题。
举两个 demo ,管中窥豹: 1. 返回一个 json 响应,一行代码: ```php echo json_encode(['code' => 0, 'msg' => 'success', 'data' => ['user_id' => 1, 'nickname' => 'foo']]); ``` 2. 如果你有一个 map ,你想翻转它的 key-value: ```php $map = ['red' => 'tesla', 'blue' => 'volvo']; $map2 = array_flip($map); ``` 其实就是得益于几乎万能的 array 和强大的内置函数。另外就是 fpm 模式简单粗暴地解决了内存泄露,让菜鸟写出来的代码也能稳定运行。 成也 array 败也 array 吧,数组的滥用导致了几乎在 php 的所有项目中 array 都乱飞,给团队协作带来了很大的不便。
## 无需编译 可能你说,编译不久几毫秒吗,又不费时间。 后期编译型语言,改个字符串,你可能等 300-1500ms 才能刷新一次。 如果用 swoole: hyperf vs laravel,你会发现 hyperf 开发速度慢一大截。 ## 完整的包 ``` public function order(Request $request) { # 先删除 达成伪更新 AiOrder::where('video_id',$request->video_id)->delete(); $models = []; foreach ($request->statis as $statis){ $models[] = (new AiOrder())->fill( Arr::only($statis,[ 'device','single_number','single_id', 'total_number','good_num','person_id', 'images','good_num_statis','input_at','output_at' ]) )->fill([ 'video_id' => $request->video_id ]); } DB::transaction(function () use ($models){ foreach ($models as $model){ $model->save(); } }); return $this->ok( ['msg' => 'ok'] ); } ``` 这是我前几天写的,共 820 字符。 换成 go: ``` var requestData map[string]interface{} if err := json.Unmarshal(c.Ctx.Input.RequestBody, &requestData); err != nil { c.Data["json"] = map[string]interface{}{"error": "Invalid request format"} c.ServeJSON() return } // Get video_id from request videoID := requestData["video_id"].(string) ... from chatgpt ``` 2458 字符