无忧技术网
无忧技术网 - RSS订阅 

优秀的PHP程序员至少应该了解PHP代码的优缺点


作者:[佚名] - 发布:2011-8-18 10:01:01 - 来源:LinLook

我在SitePoint做面试官的时候一定会问的问题是:你认为PHP代码的优劣体现在哪里?因为这个问题可以让我大体知道应聘者是哪种类型的程序员,而不是单纯地考察他对PHP函数的掌握程度(这一点Zend的PHP认证做得不错,雅虎的PHP程序员面试题也属于此类)。重要的是,这个问题可以让 我知道应聘者是否经历过这样的事情——从一个懒散程序员手中接过一段凌乱的代码进行重用,或者要帮助团队中的其他成员来处理这类事情。

诚然,对于这个问题我自己也没有一个满意的答案,不过我知道哪些答案是我想听到的:

优秀的PHP代码应该是结构化的。大段的代码应该被分割整理成一个个函数或方法,而那些不起眼的小段代码则应该加上注释,以便日后清楚它们的用途。 而且应该尽可能地把前台代码如HTML、CSS、javascript等从程序中分离出来。PHP的面向对象编程特性可以很好地帮助程序员将代码整理有 序。

优秀的PHP代码应该是规范化的。无论是为变量名和函数名设定命名规则,还是对一些会重复使用的过程如数据库操作和错误处理进行标准化,抑或是简单到规定好代码是怎样缩进的,这些规范化都可以让代码的可读性大大提高。

优良的PHP代码应该是自适应的。PHP有许多特性如magic quotes和short tags,这些特性的打开和关闭会影响到程序的运行。所以,一个好的程序员应该在他的代码中加入适当的语句来使程序能够根据环境进行调整。

优良的PHP代码应该是安全的。虽然PHP是一种高效、灵活的语言,没有固定的框架,但却把安全问题留给了程序员们。对潜在安全漏洞的深刻理解,如 跨站脚本攻击(XSS)、跨站请求伪造(CSRF)、代码注入漏洞、字符编码循环漏洞等,对于今天的专业程序员来说是至关重要的。

当应聘者在回答这些问题的时候,我就能清楚地知道是否该录用他。当然,有时程序员并不能很好地阐明这个问题,这时我们会让他们做一些PHP测试。测试中的许多问题表面上看起来非常简单,但这也给了应聘者们一个展现自我的机会,因为只要观察得仔细,就能找出问题。

下面这一小段“劣质”的PHP代码是一道简化了的测试题。这种问题就像在问:你该怎样优化这段代码?

这段代码的主要问题在于它把用户提交的数据直接显示到了网页上,从而产生XSS漏洞。其实有很多方法可以填补这个漏洞。那么,什么代码是我们想要的呢?

这是最低要求。XSS漏洞用HTMLspecialchars函数填补了,从而屏蔽了非法字符。

能写出这样代码的人应该是我想要录用的人了:

可惜的是,能给出这样让人满意答复的程序员少之又少。我们花了3个月的时间才招聘到让我们满意的程序员。(注:echo命令中的括号还是应该保留的)

那么,你会怎样回答文章开头提出的问题呢?你认为PHP代码的缺点体现在哪里?你认为一个PHP程序员还应具有哪些品质?

责任编辑:liqwei
打印本页】【关闭本页】【返回列表
·上一篇:PHP6将实现的8个特性和功能
·下一篇:IIS6+Rewrite 部署ThinkPHP时无法路由的解决方案
 文章评分
  • current rating
-5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5
 相关文章
·[运维管理]国外百万级PHP网站架构分析 (2011-08-18)
·[PHP]PHP6将实现的8个特性和功能 (2011-08-17)
·[PHP]PHP容易被人忽略的10件事 (2011-08-08)
·[PHP]PHP 5.3/5.2 版本的选择 (2011-02-18)
·[PHP]PHP加速器原理介绍 (2010-12-03)
 广告推荐
 相关评论
 站点最新文章 更多>> 
·[程序综合]词性标注集(北大版)
·[Java/JSP]泛型
·[协议规范]5类IP地址如何划分?
·[至理名言]曾国藩:利可共而不可独,谋可寡…
·[至理名言]知乎上的48条神回复,针针见血,…
·[程序综合]汉字 Unicode 编码范围
·[应用服务器]开源分布式文件系统FastDFS和Mog…
·[财经知识]什么叫NDA协议
·[财经知识]2015最新个人所得税税率表及计算方法
·[分析研究]一男子赶集卖猪碰巧遇到一少妇,…
 广告推荐
 站点浏览最多 更多>> 
·[协议规范]http断点续传原理:http头 Range、…
·[NoSQL]Mongo数据库简介
·[JS/CSS/HTML]HTML 空格的表示符号 nbsp / en…
·[协议规范]什么是SPF记录?如何设置、检测SP…
·[PHP]精选国外免费PHP空间推荐
·[程序综合]常用IP地址查询接口
·[协议规范]图解 HTTPS 通信过程
·[程序综合]什么是 DNS Prefetch ?
·[程序综合]获取客户端IP地址的三个HTTP请求…
·[PHP]国产常见PHP开源框架比较