[不懂就问] PHP 的开发效率具体快在哪里?
有没有熟悉多门编程语言(包含 PHP )的大佬,想问下 PHP 的开发效率到底快在哪里?
总结一下各位大佬提到的优点:1. 语法糖:array/string ,json 处理很方便。2. 弱类型:不需要指定变量类型,少写代码。3. 解释性语言:不需要编译,开发、调试速度快,部署简单。4. 生态:开箱即用的框架,优秀的 ORM 。
起码 array 是真的方便
十年前对 startup 方便的包比较多,拉几个包就是一个项目,十年后的现在没有任何优势,反倒因为 fpm 还是巨大劣势了。
起码 array 是真的方便+1
f5 f5 f5 f5 f5 f5
举个例子,做一个文章模块的后台管理功能,增删改查,你用其他语言要多久做好
就这么说吧,我司前一段时间做了一个新的 app ,客户端 3 ( flutter) 人,服务端 1 人。25 天弄完,然后 app 就死了。
array 是 yyds
内置函数一堆啊,str_xx array_xx ,又不放弃历史包袱没兼容问题改了就好使,又不用编译
自己去用一下咯,半天估计就能上手一个主流 php 框架
因为没有太严格的类型,array yyds ,加上 orm ,你代码里面可能看不到任何 sql 语法
内置函数,强不强先不说,全那是真的太全了
用过对比过才知道是真的快
CRUD 的神
和 django ror 比起来呢?
看看这个就明白了 www.php.net/manual/zh/funcref.php
不需要编译,不需要指定变量类型( nodejs 也具备这些优势,但是 php 的成熟开源项目更多些吧)其他流行语言都不具备这两点
修复 - 保存 - F5
- 万能 array/string ,加上一系列 array 的内置函数,什么一维二维转换,排序,提取全部 key ,提取全部 value ,数组合并等一系列业务中对于数组的常用操作都可以用一个内置函数搞定。字符串等操作更方便。2. 比较优秀的 ORM ,collection 等等。基本不见 sql 代码,只要不是超级复杂必须用原生 sql 的逻辑,只要定义个 model 全都解决了,甚至不定义 model 都行,内置的各种 ORM 方法可以很快的解决一些非常简单的 curd 逻辑。3. json 处理友好,数组/对象很方便的转成 json ,也能很方便的解析 json 。也跟 php 的弱类型有关,如果是 Go 这种强类型语言还得定义个结构体。当然强类型语言也有好处,但是开发效率确实会慢一点。4. 无内存泄漏/全部 builtin 类型都是线程安全的,完全不需要考虑什么加锁之类的。没有并发心智负担。5. 比较现代化的包管理/还算丰富的社区包/扩展,基本 web 常见问题都有对应的包。6. 比较好的向前兼容,例如你用 php5.4 开发的代码,直接换成 php7 有 99.99%的可能性没有任何问题。7. lnmp 架构比较简单,运维心智负担低,四五台中配机器抗起几万的 qps 没啥太大压力,性能也还算凑合。当然 php 也有很多缺点,这里就不讨论了。
主要是十几年前跟 C/C++、java 比,写起来自由方便,无需编译部署简单。放到现在来说除去市场惯性因素,JS/TS 、Python 这些其实效率更高,[]和{}区分定义对前端来说也更少出现因为某些 phper 辖 JB 乱用 array 导致接口数据定义乱飞的情况
#17 说的也是一个优点,改完代码保存至今就能看结果,强类型语言还得编译一下,即使是 go 这种编译速度很快的语言,当项目变复杂/变大之后,编译也很慢。并且有时候如果有人引用了一个奇怪的包,例如只能在 linux 下用,mac 和 win 不能用的包,你就直接编译不了了,但是 php 不会有这个问题。
举两个 demo ,管中窥豹:1. 返回一个 json 响应,一行代码:phpecho 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 都乱飞,给团队协作带来了很大的不便。
原先 JavaScript 也是所写所得,不需要编译的。后来加上各种构建工具、TS 之后,也是需要编译(开发阶段有 hotreload )
这类问题都和语言关系不大的....重点是框架php 几个开箱即用的框架能快速出成品,会的人多上手也简单
可以 ssh 到 server 用 vi 直接改生产环境代码,改完立即生效
额,上面说的这些函数、数组用 ai 也就几分钟的事。
以前 tp3.x 的时候,你甚至可以一个 contorller 里写完成全部业务 🐶(畜生写法)
直接改代码,无需任何编译,各种弱类型表述,框架多
我说的就是最单纯的用 js 作后端语言,毕竟 php8 之后也变成强类型语言了,ts 之所以效率慢也是因为强类型
## 无需编译可能你说,编译不久几毫秒吗,又不费时间。后期编译型语言,改个字符串,你可能等 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 字符
市场份额不会说谎,管理后台、内容站清一色是 PHP ,可能其他所有语言加起来的份额都没有 PHP 大。1. 管理系统,例如游戏领域,无论用什么语言开发的游戏,大概率还是要配一套 PHP GM 。2. 内容站更是了,新闻站点、贴吧都是其他脚本类型的语言例如 py 、node ; 有优点,但是缺点更大。py: "WEB"基本只有运维系统这个领域超过了 PHP, 因为曾经 PHP 常驻应用模式不是主流。py 开发复杂逻辑太难阅读了,curd 又是频繁改动的。py 在智能领域是瑶瑶领先,但是 web 是真打不过。node:国内小众,开发起来还不错,但是调试太难,例如闭包后,丢失上下文,基本没有办法监控一个请求有哪些逻辑(请求参数、影响结果、过程 LOG 、 有哪些对外部请求等等),而闭包用法处处都是。
php 优点是:少写代码,且通俗易读。Java spring 属于多写代码,sping 一上就变成晦涩难读。go 属于多写代码。ruby ror 属于少写代码,但猴子方法把代码变的晦涩难读。js 属于 async/await 把代码变的晦涩难读。
php 开发快啊一个人 我两天 在需求明确下 干一个后台用这 flamentphp
#30 强类型的 python ,也属于多写代码
laravel 重度用户,轮子够多,什么需求都能满足我之前发帖过的 第一次做全栈,AI 考研英语,希望听听大家的意见和批评,谢谢各位!,用的 Lumen TDD 模式开发,后端占总开发的时间估计只有 20%,剩下的时候全都去弄前端和 ui 了
livewire+tailwind 前后端开发效率直线上升,如果算上后台管理再加个 filament 太轻松了
1 、开发快。一个基本的 Web 请求,Go 的话,需要先定义参数绑定结构体,响应结构体。PHP 不需要,直接读请求参数,输出直接 json_encode 。大部分 Web 业务,都是增删改查,涉及到的大多也是数组对象的一些操作。PHP 的数组和内置函数十分强大。2 、调试快。如果发现某个地方有问题,直接改下代码,刷新页面就可以了。Go 的话,需要重新编译再执行。PHP 的 var_dump 可以直接输出变量的信息,简单粗暴。Go 也有断点可以调试,但是复杂结构的信息不如 var_dump 的直观。3 、PHP 麻烦的地方,一个就是运行环境相对复杂一些,另外就是性能和并发问题。现在也有其他解决方案。
laravel 的 ORM ,是我做过的后端开发语言框架里面,最强的
那是当年 Java 没 spring boot ,需要写的东西太多太重,也没 k8s 没 docker ,等等没有那种傻瓜式的一键部署的东西,并且 Jenkins 没那么的好用。可是现在 Java 也行了,并且 Java 代码的优点刚好适用于目前的商业环境,没有 C++那样的复杂度,没有 PHP 的零碎,大型项目代码多了,比其他语言更好维护,并且开源社区给力,有问题有真大佬解惑,解决问题效率高的多。毕竟 PHP 的简洁快速是有代价的(项目太大没有约束,写的太随意别人根本看不懂,基本无法维护)。C 系的复杂度也有代价,只有维护过大型项目的人才知道维护效率多低,有时候多了一个维度后,复杂度指数级上升,对于从业人员要求更高。而 Java 属于刚好找到了一个甜点,干碎了其他的语言,荣登 top 。
PHP 可以脱离框架和不依赖外部组件裸写 WEB 业务,这是其他语言做不到的。连 node.js 也做不到这一点
不需要类型判断是最强的。结合万能的 array ,让人欲罢不能。
动态语言开始写的爽,时间一长就是灾难,当然也可能产品死得快体验不出来
这个说法最早是 php3 时代,可以轻松的将 php 当作一个模板系统,更新页面不用编译重启,还带各种语法糖帮你简写,新手上来就可以做些东西,也不用学什么面向对象、mvc 之类的东西特别是对比 java 那套东西简直无脑开发,当年很多新人入行就是靠的这个,项目配置不清楚可以直接用 php_info 来查看,相比现在做个东西起步就是要上手一个框架搭建还需要脚手架来支撑简直不要太 easy ,引入库也超简单。错误处理也超简单,很多语言里的错误他直接抛个警告就完事,而且还可以在配置中将警告忽略,完全不用理会,很多时候开发人员只要页面显示的内容正确就完全忽略了这些警告而且以前很多公司会用这玩意的原因还有一个就是生成页面缓存超容易,里面有一个 ob 系列的函数专门做这个处理,可以直接缓存页面的输出到磁盘,降低服务器端渲染的压力只不过当前后端分离开始流行后 php 的这些优势就逐渐降低了,web 开发的复杂度也开始上升,这种时候 php 的一些弱点也开始出现,所以 php 也开始逐渐转向一些复杂框架结构,而这种时候我感觉 php 相对其他语言并不一定有什么优势
写后台,配合一些脚手架,不用写多少代码,效率很高。缺点是,弱类型虽然方便,但写的不规范,很容易出 bug 。
大佬们,下面这套 Java 技术栈如何?我感觉也挺快的Kotlin + Spring Boot + JPA/Mybatis Plus + JRebel 插件 + Vue.js + Vite + Element Plus + GitHub Action
async/await 还难读?是因为喜欢 callback 嵌套吗?
就在你调研使用什么语言框架的几天时间里,人家已经搭建好后台,挂到服务器上运行了,至于用户量速度安全这些小问题相信后人的智慧
tp3+layui 梭哈
只需要懂 array 就能开发了,这门槛够低了吧
ssh xxxvimbalabala 一通改:x然后浏览器 F5 看效果不编译,不打包,不重启服务
#45 你简单代码,当然可以阅读,但遇到复杂点的业务,多个 await 相互循环调用可以把你绕晕,还不如直接 promise 。PS 补充 js 的的另一个大缺点:不能正常处理 64 位整数的基本运算,node 作为服务端 js 的实现,于是只能用 53 位的数字运算,整数用 53 位表示,浮点数也是 53 位。于是如果一个正常的数据库( mysql 、sqlserver 、sqlite...)返回一个稍微大点的常见的 bigint 类型的有符号整数,比如 ~(1<<63) = (1<<63) -1 = 9223372036854775807 ,那么别的语言收到的都是这个数 9223372036854775807 ,但唯独 node 由于先天的残缺收到的值变成了这样:>let bigintFromDB = 9223372036854775807;>console.log(bigintFromDB);9223372036854776000
看到没,js 把 9223372036854775807 变成了 9223372036854776000 ,最后几位全变 0 了。由于历史兼容原因,js 的数字运算在语言层面是残缺且无法修复的,现在 cpu 都是 64 位的,64 位的整数正常加减乘除运算是最基本的使用需求。
我懂你!
let bigintFromDB = 9223372036854775807nconsole.log(bigintFromDB)// 9223372036854775807n
另外我看不懂“多个 await 相互循环调用”是表达什么……
我认识的大多数 PHP 程序员都可以独立完成一个完整的项目(前后端运维部署等)而我认识的 JAVA 程序员中很少有人能做到这一点
#52 那么问题来了,你能不能让 mysql 每个 sql 查询得到的整数后面都多一个字母 n ,请写出 sql 语句。
mysql.createConnection({supportBigNumbers: true,bigNumberStrings: true});
年轻的时候直接在生产环境做开发。后来有个小工具开发着开发着发现,居然还有这么多人在用。
刚好 php python go java 都有完整项目经验,java 使用率最高的原因绝对跟语言本身和 spring 的套娃设计无关,中小项目仍然是 php 领先,写成什么样其实看人不看语言。但 java 有大厂背书,大环境整体方向卷,最重要的生态最强大,从业人员也慢慢都向 java 靠拢。仅论开发效率,真的根本没法跟 php 比
#56 这样不行,这样数据库返回的数字都变成字符串了,能不能把数据库返回的数字变 new BigInt()
typeCast 请: github.com/mysqljs/mysql?tab=readme-ov-file#custom-type-casting别跟我说你不会写。
先不说别的,你就说 array 好不好用吧
await 不如 callback?for (...) { if (await ...) { continue; } if ((await ... || await ...) && (await ... || await ...)) { await ... }}这种逻辑用 promise 更简单?
装个浏览器插件 F5 都省了
目前写一些需要立即使用的处理数据的脚本,都是用 PHP ,就是快
github.com/crmeb/CRMEB/blob/3cd421d9873ed8c937460cc72f8bfbedf2a261d6/crmeb/app/services/order/StoreOrderServices.php举个例子,array 到底有多好用😂,但这也是我不太喜欢 php 的原因
强大的内置函数,万能的 array ,好用的 ORM 加上 FPM 加持,不说了,我写的我的 PHP 代码去了
作为一个 phper ,这个帖子看的我高潮
php 天。。。。。呜呜呜呜呜
看了这么多大佬的回复,突然想起一句话:PHP 是世界上最好的语言
PHP 是世界上最好的语言
脚本语言的优势,然后又是弱类型的。。。快速开发真的方便,有问题,代码上去马上就能生效。
至少语法方面,比 node 不知道优雅到哪里去了array 和 orm ,以及非常完善的标准库,写起来非常爽。
Java 可以代表富人阶级,php 可以代表中产阶级和广大无产阶级,你可以说 php Low ,不高大上,甚至很屌丝,但是它群众基础好,易用亲民,低成本,高产出。
阵列2. 内置函数3. 官方文档(含范例)当然 cgi 模式下可以 F5 立马看效果是额外优点没错
app 死是什么
PHP 开发体验没得说, 要是团队稳定,或正规公司有专门的规范管理还好.但问题是 PHP 太过敏捷了, 如果你接手过一些团队变动多次的 php 项目, 尤其外包项目明显, 你就会明白 php 的恐怖之处了. 这些老哥改 php 代码都不过脑子的, 只要不报错就完事 OK. 突然出现的全局变量/全局函数. 业务代码里任何一个地方都能出现的随意跳转, for 循环里查树结构 sql, 变态一点的在模版文件里直接查 sql. 每每想起我接手过的 php 项目就头皮发麻. 最骚的一个操作, 曾经接手一个项目, 客户说性能太慢让我优化下, 我一步一步 debug, 发现前一个老哥在 index.php 引入的一堆依赖里的某嵌套层次很深的地方, 加的日期+域名双重判断随机睡眠 10 到 120 秒...
现在有 serverless 其实 JS 就可以一把梭,但是 JS 现在的复杂的工程化感觉又让这一切失去了动力。
不晓得为咋楼上都说 array 好用。。。只有我一个人觉得 php 的 array 反人类吗? array 是值类型,直接传递将会复制一份,不加&没法修改原 array ,加了&,你就得配套 unset ,要是引用类型,啥毛病没有。如果我需要用到这个很少会用到的复制,我完全可以调个函数来自己复制
这些特性似乎比较像 python django?
#70 php 语法比 js 优雅?看到那么多$我就想吐
哈哈哈
Java 和 PHP 互写的表示,Java 越来越像 PHP ,PHP 越来越像 Java
这才是对的 複制值与参考混淆才是坑
写完 go 再回来用 php 的 array ,觉得简直像瞎子赶路, 变得非常不适应了。强类型语言改点代码真的爽,重构分分钟钟的事。
都有 AI 了 随便一个语言加上趁手的框架 效率大差不差
动态类型一时爽,代码重构火葬场
PHP 是服务器端脚本,这意味着保密,可以保护程序的实现。PHP 代码可嵌入 HTML ,这意味着灵活,可按页面快速完整逻辑。PHP 以原生代码广泛支持数据库,这意味着快速存取数据。PHP 易于学习,语法类似于 C ,容易上手,这意味着容易找到 PHP 编程的人。PHP 兼容主流平台。PHP 可扩展,这意味着,在专有领域,也有解决方案。PHP 框架和 CMS:这意味着大量成熟应用,开箱即用,成本低,自己定制开发也有 Laravel 、Symfony 和 CodeIgniter 。PHP 是开源的,非常受欢迎,社区也很 nice ,成功案例有 WordPress 、Facebook 和 Wikipedia 。PHP 的性能还在提升,支持现代编程实践,这说明生态有活力,不会被时代淘汰。
第一个就错了
说 array 的都是 PHP 小白, 应该说: [ ]
你居然不喜欢美元
中小项目用确实快,大型项目一定会成为屎山。大型项目需要严格执行代码规范、CR 、代码审查,禁用魔法操作,如果可以最好用 php8 以上的版本然后当强类型来写。但这对团队要求太高了,招到靠谱的 php 真的不如 java/go 容易。总结,FPM 制约了上限,弱类型无限降低了下限。
要看历史发展的,十年前接的项目大部分是各种商城、CMS 、论坛,很多开源项目可以利用,套个模板加个插件改一改就上线了。上线部署也很粗糙,大部分是 FTP 上传后刷新,版本控制都少。给客户演示时还能当场上服务器改代码,保存立马生效。大部分人都不会断点调试,就在代码里 var_dump 变量然后 exit 结束脚本,然后回浏览器按一下 F5 看输出结果然后继续写。密码加密不是 md5 就是 sha1 ,这些都是内置函数。写 Java 的还在纠结 json 库用哪个,选了 Fastjson 就有福了,一部分人整天在升级版本修漏洞,另一部分连自己系统被干了都不知道,而 JSON 处理在 PHP 里也是内置函数。写 Java 的还在头疼日期和时间戳之间的处理,PHP 一个万能 date 函数就解决 99%的场景了。写 Java 的还在头疼 url 参数编解码、特殊字符转义,PHP 内置函数又搞定了。写的代码运行出错,一行配置或者代码前面加个 @ 就能抑制错误继续跑,try/catch 都不用,要是写 Java 还在挠头哪来的空指针。前后端没分离的项目,还在纠结模板引擎选什么,写 PHP 的在包含 HTML 文本 PHP 的代码中改得飞快。写 Python 的还在吵 Django 和 Flask 到底要用哪个,吵完了发现怎么上线还要套 Gunicorn 之类好麻烦。写 Ruby 的表示 Ruby on Rails 非常牛逼,就是语言小众招不到人。写 Node.js 的还在回调地狱里出不来。在那个年代写 PHP ,你就说快不快吧。
要说 JSON ( JavaScript Object Notation )的支持,难道不应该是 JS 吗? 自从有了 Node.js 就淡化 PHP 了,Array 、JSON 、弱类型、强类型( TS )、日期( moment )、工具库( lodash )、异步、同步、流、模板引擎、框架、前后端分离、AI 、前后端同构、代码规范( ESLint 、TSLint )、测试、部署、热加载……不要太爽!唯一不爽的是 node_modules 太臃肿了……囧 ing……
接触过的 PHP 项目不多。这些项目没一个带测试,写它们的都是些查 CSDN 那种人;全然屎山难以接手、重构。所以对 PHP 界没有好印象。
实用是王道。往往项目死了还在追求技术
起码 array 是真的方便 +10086
反了,那都是老手,php5.4 以后才能用 [ ] 的
如果是简单的需求,Java 还在定义模型,PHP 已经写完逻辑开始调试了。
php 开发效率快是因为他的 array 无敌
不用编译,直接改脚本直接出结果还不逆天? java 还要编译部署
www.cnbeta.com/articles/tech/1302069.htm 只说这个语言不行, 然后又说替换语言连个想法都还没有, 虚空入土啊, 这是 整个前端发展…
1.有公网 IP ,并且用了 curl ifconfig.me 检测了。2.sudo ufw status 看到防火墙规则 22 Allow Anywhere ,并且 sshd…
Ncurses是一个能提供基于文本终端窗口功能的动态库. Ncurses可以: 可以使用整个屏幕 创建和管理一个窗口 使用8种不同的彩色 为您的程序提供鼠标支持 使用键盘上的…