Heim  >  Artikel  >  Backend-Entwicklung  >  PHP的一些问题

PHP的一些问题

WBOY
WBOYOriginal
2016-06-06 20:28:311440Durchsuche

今天被pdo的lastInsertId折腾了一下午,实在是醉了,使用exec执行insert导致lastInsertId返回的始终是0,必须使用prepare/execute才能正常获取。

好多时候都觉得PHP为什么这么随意啊,empty/isset/is_null,嘿,真TMD奇葩啊(我就爆粗了怎么了,不能忍)。可能是历史遗留原因,或者是有一些我不知道的原因请一定指出来,一直很奇怪当初设计的时候为什么不能是:is_empty/is_set/is_null,或者是:isEmpty/isSet/isNull?这样的例子还体现在str类函数上,这里面还有参数顺序的问题,比如str_replace目标字符串在后面,substr/strpos在前面,我就想问下,一门语言怎么能随意到这种程度呢?

另外还有类型转换,每次拿到用户传过来的值都有点怕怕呢,很多方法不加strict都不敢用呢,我问你为什么这样,你说:因为我“弱”啊!你看只要你不用===,判断我都可以一溜烟跑下去呢!

剩下就是异常,可预见性的要么是exit/die,高大上一点的就用Exception,不过大多数Exception还要我自己抛呢。这还没完,大人您还有error呢,还有等级呢,异常还捕获不到呢,要做跳板呢。

回复内容:

今天被pdo的lastInsertId折腾了一下午,实在是醉了,使用exec执行insert导致lastInsertId返回的始终是0,必须使用prepare/execute才能正常获取。

好多时候都觉得PHP为什么这么随意啊,empty/isset/is_null,嘿,真TMD奇葩啊(我就爆粗了怎么了,不能忍)。可能是历史遗留原因,或者是有一些我不知道的原因请一定指出来,一直很奇怪当初设计的时候为什么不能是:is_empty/is_set/is_null,或者是:isEmpty/isSet/isNull?这样的例子还体现在str类函数上,这里面还有参数顺序的问题,比如str_replace目标字符串在后面,substr/strpos在前面,我就想问下,一门语言怎么能随意到这种程度呢?

另外还有类型转换,每次拿到用户传过来的值都有点怕怕呢,很多方法不加strict都不敢用呢,我问你为什么这样,你说:因为我“弱”啊!你看只要你不用===,判断我都可以一溜烟跑下去呢!

剩下就是异常,可预见性的要么是exit/die,高大上一点的就用Exception,不过大多数Exception还要我自己抛呢。这还没完,大人您还有error呢,还有等级呢,异常还捕获不到呢,要做跳板呢。

不要遇了点挫折就全盘否定好不好。被PDO折腾一下下午说明你对PHP还不够熟悉而已,就算不熟悉,难道没有手册,不会百度吗,网上找一个完整可用的例子看完再写不行?这也能怪PHP?用句潮语来说:“我也是醉了”。要多点从自己身上找问题好吗?

你说的函数名不统一、比较乱等问题,本身就是有它的历史原因,PHP的使用者众多,很多东西不是说改就改的。当然随着时间推移,我们现在慢慢看到PHP在不断进步,PHP7.0也即将发布了,它所做的性能优化和新添加的特征,都是值得我们期待的。

以前也用过JAVA,现在用PHP也差不多3年了,也没有感觉弱类型有什么不好的,习惯了你就完全可以把控它。

有时候,发发牢骚没关系,特别是不熟悉的时候都容易这样。但一门语言你既然选择它,就是看中它的优势来的。老是盯着它的不好还怎么学、怎么进步。如果觉得它哪里不好,自己可以尝试找办法去解决或者弥补它的不好,当然前提是你花更多时间去了解它。

既然举报我答非所问,我就改一下吧。重新看了一遍题主的问题,一大堆吐槽里面夹着一句问题:“我就想问下,一门语言怎么能随意到这种程度呢?”感觉题主是来求认同的而不是来求解惑的。很想反问题主:提问题怎么可以随意到这种程度呢?

PHP语言的高度不一致性的确让很多人吐槽过了,这是事实,而造成这一现状的根本原因是PHP压根儿就不是一门设计出来的语言,而是一门成长出来的语言。

当年是一个哥们儿觉得CGI写Web服务器程序太麻烦了,然后就自己折腾出了一个开发个人网站的工具包,后来丢到了开源社区,社区上的人们都觉得这个工具包还不错,于是你加一点功能,我加一点功能地扩展这个工具包,最后演化成了PHP语言。早期PHP就是Personal Home Page的缩写,后来为了赶时髦才改成了回文式的PHP: Hypertext Preprocessor。

像Ruby、Python或者C#这些语言,都是由颇具经验的软件开发人员精心设计而来的。一开始就是为了做出一种适用于某些场景的程序设计语言,语言一致性高,语法设计精妙,处处闪烁着设计者的智慧和经验。而且这些语言从发布之日起就一直是官方团队领头开发,社区贡献的代码都需要经过严格审核才能进入核心版本库。

然而早期的PHP根本没有所谓核心开发组,大家在各个技术新闻组上交流意见,用FTP分享代码。PHP解释器是用C写的,大家纷纷把各种C语言的代码库包装成PHP语言的函数,于是也保留下来各种流派的函数命名规则。后来甚至就连最早开发和发布PHP的那哥们儿也不管了,一直到3.0版时,社区才有了几个人组成核心团队来发布官方版本,然而他们更主要的工作是协调社区意见和提供bug跟踪。PHP的面向对象模型更是到了5.0时代才由Zend公司的开发者做出来。

是不是觉得非常乱?告诉你一个事实:不光PHP,整个Web世界就是一片混乱中搞出来的。你看HTML里的标签,为什么有全写也有缩写,<title></title>这种写法和<img alt="PHP的一些问题" ><ul></ul>这种写法并存?因为HTML发展之初也是没标准的,早期有过<img src="xxx" alt="PHP的一些问题" >的写法,也有过<image href="xxxx"></image>的写法,不同的个人开发者给出不同的实现罢了,直到有一天,支持第一种写法的浏览器成为绝对主流了,于是才有了标准。

PHP一直是典型的自由软件的运作方式,先有大家的自由改进,然后互取所长,然后攒出一个较优选择成为官方,然而大把多人在官方基础之上自己改东西,有一些有幸被官方收纳到未来版本人,有一些就沉没了。

那么怎么解决乱这个问题呢?许多人都提出了解决方案,比如把命名不一致的函数封装到框架里,把empty之类的像函数而又不是函数的语法也封到框架里,把一切混乱包起来,只对开发者暴露出优雅的部分。然而现实情况是PHP语言领域没有一套唯一的框架,世界上的知名PHP开发框架不下20种,各公司各团队自己库和框架更是海了去了。

PHP最后就和C语言一样,只能靠人来解决这个问题——别写烂代码,尽管语言允许你乱写——选择一种大家喜欢的语言风格,定为团队标准,然后执行它。还有,用一个好的IDE,自动完成提示能把你从记忆各种不同风格的函数中解放出来。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn