开始学了些Java,根本就不会PHP,为了糊口乱投简历得到一个机会,看了一晚手册瞎蒙到一个PHP的岗位,从此就写了十几年。
说缺少企业级功用这个是不太稳当的,RPC/SOAP/WebService这一整个体系从表到里都是很完备的,而且十几年前便是官方标配的。刚作业那会儿由于了解得不够,我还直接用Socket经过WS连接过另一个C#写的大/中型体系,包括解析WSDL等一系列标准化的东西,整个过程写得仍是挺开心的,便是其时觉得Socket的速度不咋地。做爬虫也没啥问题,通常不太关注功能时一个file_get_content能解决不少事,配合内置的DOM/Xpath组件仍是挺轻松的;当然了,也有别人封装好的,开箱即用。至于线程、连接池什么的,印象里如同没操过心,由于大部分时候便是当胶水言语用,也犯不着干什么特别的活。
要说优点,我觉得便是处理字符串很简单,很多年前还写过Perl,那是我以为对字符串最亲和的言语,可是Perl总是要区分标量、数组、哈希,尤其是那个引证规则,加上她OOP里那些个宗教用语,显然PHP相对来说规则要简单太多。而HTTP/WEB也便是一堆字符串来回折腾,个人觉得只要便利处理字符串的言语,都天然的便利处理HTTP相关的东西——所以,3P都适合。
瞧不起?这倒谈不上,我自己至今还得写PHP呢,但以下观念或许是现在程序员瞧不起PHP的原因的一部分:

php

首要,如果你只用过PHP,或许在教科书上学过C并还写过几行,那应该还没到”瞧不起“的状况,上面提到的处理字符(串)相关的大部分函数,二者之间太像了,PHP几乎便是一个C的Shell版别,写完就能够履行,仍是很有意思的。可是,这些PHP前期(我最早也就用PHP3.1再往前没考究过)就带着的根底函数有个大缺点,命名规则不一致加上参数顺序稀里糊涂,很多程序员都有对齐、命名强迫症,会觉得这设计得也太随意了。如果你按用处和增加时间分个类,就会发现也没那么糟了。
其次,奇特的array,老实说我觉得这也许算个优点,搞得我甚至在Java里都习气一个Map通吃悉数结构,并弄了个办法集以便像PHP的array相同随意多层存取而不报反常(Dict.java)。这个观念估量会被喷,没错,这便是我要说问题之一。对于一个已经习气了在其他言语里区分数组、哈希等的程序员来说,这array是个啥玩意呀,它同时是list/map/set,那么你的同事写的代码传递给你一个array时你也得当心了,两人没讲清楚结构最终或许就要干一架。我亲眼见我以前一位组员由于array转JSON与前端争得面红耳赤,就由于在一个数组里混入了一个字符串的键值(几层后删掉了),导致前端收到的数据时而是array、时而是数字下标的object。
再之,由于有人拼SQL、途径或命令时直接把变量拼进去,在PHP里这超级便利,而这个变量很或许来自外部恳求的参数,这导致处处都是可注入的漏洞(注意:不只是是SQL注入)。前期不知道哪个倒运催的出的馊主意,搞出magic_quotes_gpc这么个垃圾玩意——却是对得起这么魔幻的姓名,导致你在某些框架里还得考虑这玩意是开了仍是关了,你要转义仍是不转义(或许导致转义两次)。这特么便是出了问题你不让人把问题解决,却特么瞎揣摩还说都是为你好,你咋知道我写程序就一定是读写数据库呢?你咋知道我对送来的字符串就不作切开或转换了呢?很多很多年了还得去补不知道何方神圣挖的坑。
然后,过错处理。总的来说他有三套反常计划,返回值、error_handle、try/catch。返回值原本没什么好说的,但问题是一般比较时void、null、false、0、空数组、空字串和字串0均表示否,尤其是那个字符串0几乎是新手犯错的重灾区。error_handle的问题在于截获的现场不在当下,什么意思呢?当trigger_error后只是表示程序有问题、或有要注意的事,在产生的位置,你能够停止也能够持续,所以这根本不像一种反常处理机制,倒更像一个试图一致的运转时日志机制。多说一点,曩昔我自己写的PHP框架初期也对error_handle存在误区,以为只要经过过错等级或代号,在回调函数内作停止和忽略(记日志)即可;但经过实践证明这个主意是极不老练的,你编写时以为的“过错”也或许在实际某个过程中只算“反常”,能够挽救或只是只是一次测验。
还有,大局环境。比如$_GET、$_POST直至$GLOBALS,它太便利(没规矩)了,导致程序员尽管从表面上分了MVC,可是不知道哪层突然想用到一个比如Session里的什么东西,就直接取了——手册就这么教的。开了这个口儿,那怎么改需求、改Bug呢?处处加“飞线”呗,用不着一层层的折腾,改起来那叫一个爽快。你看到一个模型类的办法的参数是3个,但他或许不可思议的由于需求改变而内部经过大局又用了一个外部变量,那么就或许导致另一处调用此函数的地方并不知道内部还有这么一出戏,而在不确定的某一天迸发。这个问题你说其他言语会不会?当然也会了,Java也有ThreadLocal呀,可是并没有成批的养成这个习气,训练的人也不会告知你还能这么干(使用一般static特色做飞线传值会因多线程环境而产生问题)。应该重构和遵循UnitTest?那说好的开发快、好上手的特色就要失掉大半了。至于调试,输出就行了、断点是何物?真的碰到以为echo+exit便是breakpoint的。
头两个对我来说还不算缺点,甚至我还以为写代码的稍微注意点就能够算优点了。说说我最不爽的。作为胶水言语PHP挺好,但问题在于前期也就仅限于能做胶水。曩昔PECL/PEAR录入的还不是很全,或许倒运催的遇到前同事遗留的不知道啥法子编译装置的PHP时,你想加模块也得跟着编译。这一编译不打紧,在Linux上有非常大的概率遇到依靠问题,一个库要这个版别,另一个库要另一个版别,或许依靠的库又依靠另一个库。当你在你自己的机器上搞得一切顺利的时候,成果上了客户的机器就一箩筐的问题,搞得下不来台。
后来都用PECL/PEAR装置附加组件这个状况就好转了很多,但还有些依然是他定位为胶水言语带来的问题。要个消息管道,要装置额定的服务;要个搜索引擎,要装置额定的服务;要个状况同享,要装置额定的服务……你当然也能够说,微架构嘛,现在流行呀;以前这个概念可还没成体系,那得等到有容器概念了这么玩才说的曩昔,演示时就一台机器一个体系,没准里面装了些或许冲突的东西,在上面编译完这个编译那个,头都要整麻痹了。用Java,数据库用SQLite内置,HTTP用Jetty内置,WebSocket内置,搜索引擎内置,消息行列内置,计划任务内置……要演示就把JDK一块打包进去,写好发动脚本,双击运转。我也就服务些小客户,大部分时候这就够了,一般也就换下数据库;要有不够用的,打钱,接口我都留着呢,我给您换成微服务架构。
当然你或许会说那你能够用Swoole,看过几回但没用过,我觉得这完全是个新东西,甚至不在PHP言语的讨论范围内。这几年我写PHP写得少了,PHP自身进化也不小,也必定有些更新覆盖到我上面说的内容的。可是,你用PHP就不可避免的要碰到旧的代码、旧的架构、旧的体系,那些令人不快的东西就一定会碰到——先入(PHP)为主在外。

为什么程序员鄙视php

想了又想,就感觉可能就是个人的追求是不一样的吧,只有这个解释解释的通了。本篇文章就来剖析剖析这种事情:
一些程序员是以自己会多少东西和懂得多少专业知识作为梗取乐,就比如PHP这门言语,这门言语首要是用在web开发和脚本使命开发的,它并不是一个全能的东西,深度的言语特性也不多,所以许多程序员并不喜欢这门言语。

php

还有一些程序员总想着低本钱快速的解决问题,很关注本钱,PHP作为首要的工程言语,可满意快速的项目交给,满意了市面上绝大多数没有高并发需求的企业的IT项目的需求,所以契合这些程序员的诉求。
人是多样性的,诉求的多样性那就更多了,所以这问题又能够理解为“并不是所有的人都瞧不起或许都看得起PHP”这是一个思想标准化的主意。
现在咱们就来说说PHP的优点吧:
优点一:门槛低,前面我说过,PHP其实是很简单上手的,它的语法混合了c、java、perl以及PHP自己立异的主意。PHP把几种言语的一部分拿过来又自己立异了一点,把PHP做的更好了,所以许多人有点主意。
PHP门槛低,学几个月就能做些根本的项目了,并且工资仍是能够的。还有一点是PHP开发的速度相比其它的都快点,一个中小型的web项目,最少一个多月就能做出来了,最多也就三个月左右,除非是那种不懂的人。超过了时刻。
优点二:代码的量比较少,并且和上面说的一样,速度又快,看到许多学别的东西的人发现自己要写一些或许许多的代码,而PHP程序员写的话,就是调用函数就完成了,这也让许多人有主意了。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注