我也来吐槽 PHP 最垃圾的地方

2017-10-20 17:09:39 +08:00
 gouchaoer

神奇的 array,这种情况很多

php > $a=[];
php > echo $a[1];
PHP Notice:  Undefined offset: 1 in php shell code on line 1
php > $a=null;
php > echo $a[1];
php > $a=4;
php > echo $a[1];

另外最受不了的就是以下的情况,很多时候一个对象可能为空,这个直接抛 Fatal error 退出脚本简直要命,不过这个在 php7 之后似乎改成抛异常了

php > $o=null;
php > $o->fun();
PHP Fatal error:  Call to a member function fun() on a non-object in php shell code on line 1
PHP Stack trace:
PHP   1. {main}() php shell code:0
23218 次点击
所在节点    PHP
143 条回复
wdlth
2017-10-22 12:41:20 +08:00
@sagaxu 转语言也意味着需要转学别的工具,像包管理,Go 就有 N 种,godep、govendor、glide、gopm 等等,不知道他们是怎么搞出这么多的……
现在招人、维护填坑的成本比较大,玩新东西风险大,很多厂又改回大众技术栈了……
sagaxu
2017-10-22 12:56:34 +08:00
@askfilm 花更少的钱,能做出更多的东西,从这个角度可能成立。能正常写 web 不捣乱的,最便宜的 Java 开发大概是 15K,PHP 的可能 10K 或者 12K 就招到了,复制粘贴一下,单位时间产出可能比 Java 的还高一些。如果 php 在 web 领域毫无争议的高效,就不会有那么多用其他语言写 web 的创业公司了,你可以去专注互联网招聘的 lagou 搜一下职位,C 轮融资以前的公司,到底是 php 多还是 java 多。

我也觉得自己并不真正了解 php,为什么它有那么多粉丝,而我却找不到一个可以粉的语言。


@wdlth Lerdorf 还觉得 php 不应该用框架呢,鸟哥还反对 php7.1 的大部分特性呢。

@wdlth Go 不算很标新立异的东西,入门和熟悉是非常简单的,找填坑的人难度不大。如果用了 erlang 或者 scala,招人就急死 HR 吧。包管理方式多,不求公司内部统一,部门内部统一一下还是可行的,学个包管理器的用法花不了一个小时的。我从 maven 迁移到 gradle,为此还多学了门 groovy 语言,切换起来也没想象的那么难。
0987363
2017-10-22 13:09:54 +08:00
@sagaxu 成都表示 go 真不好招。。满大街都是 php。
wdlth
2017-10-22 13:26:39 +08:00
@sagaxu 对新特性有争议不是很正常么,ECMAScript 那帮家伙都不知道反对多少次了……

我认为职位数量并无多大意义,不同的行业不同的业务,客户为王,没转化再高大上的东西都没有意义。erlang 职位少,但游戏赚钱,而一大堆互联网公司招聘时说要有大并发的经验,流量还却没有一个个人博客多,还谈什么大并发……
askfilm
2017-10-22 13:47:53 +08:00
历史总是惊人的相似:
产品要求 3 个月上线,我们用 php 赶快做出来。。。
产品终于要重构了,终于不用维护那堆垃圾了, 写 php 写够了,用 java 重写吧, 我们要写好些,避免以后重构。。。
产品终于又要重构了, 终于不用维护那堆垃圾了, 写 java 写够了,用 go/nodejs 重写吧, 我们要写好些,避免以后重构。。。
。。。。
产品终于又要重构了,写够了, 看看有没有更好的东西来重构。。。 我们要写好些,避免以后重构。。。

重构, 我们总是乐此不疲 —— 程序员
huntzhan
2017-10-22 13:55:52 +08:00
精分还行。

# Array 到底好不好用?

before> 神奇的 array,这种情况很多

after> 第一 array 太 jb 好用了

# 兼容性到底好不好?

before> 另外最受不了的就是以下的情况,很多时候一个对象可能为空,这个直接抛 Fatal error 退出脚本简直要命,不过这个在 php7 之后似乎改成抛异常了

after> 其实我很喜欢 php 社区的 3 个风格,第一是实用性,不搞标新立异也不去追求 cool 的东西,一切为了实用,抄 java 规规矩矩的很好;第二是兼容精神,追求性能。。。

# 语法丑到底能不能接受?

before> 运维自动化用 php 写比 py 写爽太多了,原因有三点:... 第三 py 语法太恶心了

after> 你去看 namespace 的 rfc 可以看到官方态度是实用不考虑好不好看 ... 其实我很喜欢 php 社区的 3 个风格,第一是实用性,不搞标新立异也不去追求 cool 的东西,一切为了实用
sagaxu
2017-10-22 14:14:47 +08:00
@0987363 据说培训班近期输出上百万 Java 和 PHP 新手,大数据和机器学习好像也要沦陷,遍地是人,能打的却没几个

@wdlth 职位数多,对中高端求职者就更有利。赚钱的游戏业务很多,用 erlang 的却不多,一个波动之下,主流的可能减半,小众的可能就消失了。高并发是测量开发者能力的指标之一,即使暂时用不到也可以拿来考察人,高并发也不是什么高大上的东西,就算没有经验,能把几个要点讲明白也可以的

@askfilm 手上一个项目,正准备把管理后台用 PHP 重构,这样以后那块儿就不用我做了,我专心做后端。真实原因跟哪个开发效率高没关系,仅仅是因为我不想再顺便把管理后台做了。名面上当然不能这么说,我只能说“ php 做管理后台开发效率高”,“公司 php 开发人员多,拉人来帮忙方便”。

重构过 php 项目,重构过 python 项目,重构过 java 项目,也重构过 go 项目,我只想说,重构动态类型语言,太折腾人了
msg7086
2017-10-22 14:42:52 +08:00
@askfilm 你说 PHP 高效,硅谷的 Rails 程序员恐怕都要笑到胃痛了。
PHP 的流行,不是因为能花更少的钱做出更多的东西(除非你把 PHP 新手的工资考虑在价格内),而是因为 PHP 只要一个.php 文件随便找个免费空间上传上去就能跑了。
那个年代就 3 样东西可以这么玩。
1. cgi-bin 里扔一堆 perl ;
2. php ;
3. asp。

当年最有名的论坛,动网是 ASP 的,雷傲是 Perl 的,vBB 是 PHP 的,三大论坛程序制霸网络。
当年 ASP 和 PHP 的程序员也是最多的。

@wdlth 我一直觉得你说的真的完全没错。
PHP 真的就只适合小项目。结构堆得越大,语言级别带来的作用就越明显。
别的不说,光一个 cgi 结构(而不是常驻内存)就要让多少人欲仙欲死。
然后 PHP 还是那种不用框架就更欲仙欲死的语言(来试试满屏的 isset($_POST[*])
而这两份欲仙欲死,又能带来更多的欲仙欲死。
得到的,本该是像梦境一般幸福的时间……
但是,为什么,会变成这样呢……
gouchaoer
2017-10-22 15:17:35 +08:00
@sagaxu php 码农构成上素质不太好是真的,因为学校里科班出来的或者是自己折腾出来的很少会去玩 php,所以大厂很难招到基础好的人,so 还是转 java 吧。。。
sagaxu
2017-10-22 16:00:56 +08:00
@gouchaoer 这就很尴尬了,为什么最好的语言,吸引来的却是基础最差的开发者。而比较高级的 phper,很多还是 C 或者 Java 的好手。
wdlth
2017-10-22 16:18:11 +08:00
@msg7086 这不是 PHP 语言的问题,是运行时的问题,因为原先运行时设计就是执行后销毁,让资源可以释放,在资源有限的情况下给不同的程序服务。
对于单一应用而言,现在出现了像 HHVM 和 Swoole 等常驻内存的环境,同样可以支撑大型应用的运行。
msg7086
2017-10-22 16:27:56 +08:00
@sagaxu 不学习多种语言,怎么能算得上比较高级的程序员。
wdlth
2017-10-22 16:30:12 +08:00
@sagaxu 穷则搁置争议,达则自古以来
sagaxu
2017-10-22 16:46:45 +08:00
@wdlth hhvm 已经分裂成 hack 语言的平台了,差异太大,已经不关 php 的事了。swoole 是以牺牲大量框架为代价的,主流框架,官方都不支持 swoole,需要自己适配。而且能玩的转 swoole 的高级 php 开发,玩 Java 和 Go 也很容易,在大项目上死守 php 是为了信仰吗?
aksoft
2017-10-22 16:47:13 +08:00
静静的看你们装逼,看你们用固定电话按出 xp
msg7086
2017-10-22 16:51:38 +08:00
@wdlth 常驻内存环境都已经不能算是传统意义上的 PHP 程序了。
常驻内存还用 PHP 我只能想到一个意义:重用现有的轮子。
然而正常情况下连框架都换了,没道理不直接重写。
Fedor
2017-10-22 16:52:08 +08:00
口我
























bramblex
2017-10-22 17:10:35 +08:00
@sagaxu

为啥不用 rust ……性能炸裂而且还比 go 好用。

毕竟 google 是个 demo 大厂,做出来的东西很高级然而并不好用。
des
2017-10-22 17:17:35 +08:00
@msg7086 先打一顿。
其实现在的东西基本都是先上个框架然后再干活,其实也差多少
wdlth
2017-10-22 17:50:42 +08:00
@sagaxu Java 还算语法相近,Go 就算了,语法和招人都不好办。并且转的话就回到了资本问题,而不是个技术问题。现在大多数的业务,特别是以关系型数据库为主的系统,谁能保证转了效率一定能提高?提高多少?会不会带来更多的问题?提高了是否可以获取更多的回报?如果有钱,做横向扩展,找 DBA 优化数据库,增加更多的服务器、存储和带宽,会不会更好?以前百度还死守 GCC 3.4.5 呢,这不是什么信仰真爱的问题,都是被逼的。

之前鸟哥提到 PHP 7 新增了个 Hugepage,我就尝试开了一下,结果影响了其他服务……

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

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

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

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

© 2021 V2EX