php是web开发第一语言, 这已经是坐稳了的事实,因为使用简单, 工具完善, 开发效率高等优点为它积聚了大量的粉丝, 号称世界上最好的语言 。 然而,就算是世界上最好的语言也有缺陷, 下面我挑几个php语法层面不那么好用的特性吐槽下。
我想不明白当初php语言的设计师是怎么想的, 为什么非要在变量名面前加上这个美元符号?每次我书写变量时必须要按一下shift + 4键, 用其它语言可以很流畅的写代码, 在php中却老是被按这个shift打断整个过程, 这除了能给程序员带来麻烦, 我实在看不到有其它一丁点的好处。网上流传着的说法好像是因为带美元符号代码解析起来更容易 , 性能更好。 但是解释类型的语言又不只有php , 为什么其它语言就不用让程序员打这个讨厌的美元符号。 每天看着满屏的美元符号, 我口袋里的钱也没见多一分呀。
明明按一下点号(.)就可以方便快捷的搞定的问题, 却非要使用简单符号(->)来代替, 真的是借我一百个脑袋也想不明白php设计者在设计这个特性是什么逻辑。难不成是因为php解释器最终会把php的代码转换成c代码执行, 而c中访问指针的成员就是使用箭头符号的。 如果是这样那显然是php的设计者们偷懒了, 难到不能在转换成c执行的过程中多一步将点号转换为箭头符号的过程吗? 不要告诉我又是因为性能问题而办不到, 他们就不能为程序员想想?
写一个函数,返回一个数组类型, 但是在函数的外面, 鬼知道这个数组是一个list还是一个map?写php代码不知道被这个特性坑过多少回, 如果是别人写的函数 , 又没有注释, 那非得跑进函数里看个明白才知道应该这么样使用这个函数才是安全的。难到就不能把array拆成两个独立的类型分别代表list(列表)和map(字典)吗?这能为程序提供很大的便利, 写的代码也更加不会出错。
这个特性不能说完全没有优点, 对于代码的可维护性还是能起到正面的作用的, 因为这么做能让我知道我在匿名函数体里面对于外部会有哪些依赖, 让代码更可控。 然而, 这种写法真的是非常的不方便,每次写lambda时, 要用到外部的变量时, 都要使用use导入, 把代码搞的看起来很臃肿, 而且, 因为其它语言没这个限制, 习惯已经养成, 所以每次都会忘记使用use导入, 导致代码出错, 增加排查问题的时间, 这真的不是什么好玩的事。
当把代码模块化时, 然后在其它文件中使用, 每次都需要使用这个include把文件导入进来, 而且还要考虑路径的问题, 在结构复杂的项目中, 非常让人蛋疼。 而像Java和Python之类的语言中,代码管理机制设计的非常好, 想用什么import进来就可以了, 根本不用考虑路径啊,文件名大小写啊之类的问题, 能大大的提升开发效率。虽然, 有框架可以解决这类问题, 但毕竟是外部实现, 使用起来总归不是那么顺畅。 这也算是php一个比较大的毛病了。
总结的这五点算是php中存在问题的典范了, 希望php团队能加把劲, 把这些问题在未来的版本中优化掉, 让开发者写代码时有更好的体验, 更高的效率,让世界上最好的语言名副其实