设为首页 收藏本站
查看: 655|回复: 0

[经验分享] 从 PHP 一道测试题说起

[复制链接]

尚未签到

发表于 2017-3-29 09:03:46 | 显示全部楼层 |阅读模式
  前几天一位西安的 PHPer 给我说起一道 PHP 的测试题:
  <?php
$s = ‘abc’;
if ($s==0)
echo ‘is zero<br>’;
else
echo ‘is not zero<br>’;
?>
  好多人答错了,认为答案是输出字符串“is not zero”。其实正确答案应该是输出字符串“is zero”。
  原因其实简单,因为 PHP 是一门弱类型的语言,它对变量没有“必须先定义再使用”的强制要求,变量的类型也是根据赋值的类型来灵活变化的。这一“灵活性”看似灵活,实际上埋下了错误的隐患。虽然 $s = ‘abc’; 语句定义了变量 $s 为字符串类型,但因为 if ($s==0)语句中,$s 是和数字型常量比较,所以 $s 这时被隐含的转换成了数字型变量,其值是 0,所以 $s==0 比较的结果就为真。
  犯这一类型错误的人一般是从 Java、C 等语言转到 PHP 开发的程序员,因为 Java、C 等语言是强类型语言,是不允许不同类型的变量和常量相互比较的,在这种情况下会报告语法错误。
  其实 PHP 语言的开发者并不是没有注意到这类问题,在 PHP 语言里还有一个严格比较的运算符“===”,要求比较的双方必须类型一致,把上述 if ($s==0) 语句写为 if ($s===0) 就会避免前述错误的发生。
  上面的问题提示我们,使用 PHP 这类弱类型的语言一定要注意变量类型的问题。在定义变量时可以赋一个初始值以同时定义其类型。而现在的大多数新开发的语言比如年轻的 C# 就是强类型语言,前述在 PHP 里的问题在C#里是不会发生的。
  比较有意思的是,这位西安的 PHPer 给我提起前述的测试题并不是为了探讨技术问题,而是说,现在的 PHPer 好多是自学成才,基本功欠佳,长期扑身在项目开发一线,对一些细枝末节的技术问题无暇顾及,导致犯一些隐含的、低级的错误,而这些错误有时是致命的。
  其实我也早注意到这个问题。我年初在 TM 群里和一位有 4 年从业经历的 PHP 程序员聊天,他提到他去一家公司应聘,卡在了笔试这一关。如果让他在机器里的 PHP 环境下答这些 PHP 笔试题,应该不是问题,拿不准的可以马上写一段代码测试,但笔试要求所有的知识必须从人脑而不是电脑里提取,这位有4 年 PHP 编程经验的 PHPer 就傻眼了,其实那些语法大多数都是常用的。
  PHP 语言和 PHPer 现在有一个奇异的现象,需求和程序员的供应矛盾很突出,PHP 教育和培训在国内也做的很一般,许多 PHPer 都是自学成才,甚至拿一段代码就开始步入开发环节,结果是没有建立系统的知识体系,基础知识差,好多人还停留在面向过程的编程阶段,而且振振有词,号称他们只用编写函数就能解决一切问题。一些人从来没听说过 PHP 里还有框架,自然面向对象的思维就无从谈起了。
  PHP 的开发者其实野心还是很大的,他们打算把 PHP 打造成一个类似 Java 虚拟机的玩意,到时候用 PHP 开发桌面程序都不是不可能的。但现状令人沮丧和担忧,教育跟不上,PHPer 大牛成长不起来,PHP 的大厦可能只能是一个小狗窝。
  本人是一个 PHP 程序员和教员,但没打算成为一个 PHP 的教徒和殉道者,仅仅是希望让 PHP 干些它自己能干的事,目前看来它在网站建设、互联网领域的应用非常优秀,比如流行的论坛、Web2.0应用、SNS 等许多系统是用 PHP 开发的。现在也有一些企业开发应用了 PHP 的一些开源框架,也非常不错,没听说 PHP 开发的东西比 java 和 .NET 差。希望 PHP 和 PHPer 在中国一路走好,前途光明。
  张庆(网眼) 2008-11-23
来自“网眼视界”:http://blog.why100000.com
“十万个为什么”电脑学习网:http://www.why100000.com

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-356799-1-1.html 上篇帖子: 20 Great PHP frameworks for developers 下篇帖子: [转]PHP-FPM高负载技巧
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表