多数大学生出来选择的工作和专业无关
首页 > 专业知识

有助于面试的10条PHP编程习惯

时间:2018-04-23 18:30:49 [来源]:郑州PHP培训学校

   有助于面试的10条PHP编程习惯

  过去的几周对我来说是一段相当复杂的经历。我们公司进行了大裁员,我是其中之一,但却体验到了其中的乐趣。我从来没有被开除过,所以很难不去想得太多。我开始浏览招聘板块,一个全职PHP程序员的职位很吸引人,所以我寄去了简历并获得了面试机会。在面试之间,我和其主要的程序员们在咨询电话中聊了聊,最后他们给我出了一套测试题,其中有一道很耐人寻味。
  找出以下代码的错误之处:
  <?function baz($y $z) {
  $x = new Array();
  $x[sales] = 60;
  $x[profit] = 20:
  foreach($x as $key = $value) {
  echo $key+" "+$value+"<BR>";
  }
  }
  你能找到几个呢?
  如果你发现函数参数列表中少了逗号、“new Array()”是不正确的、行末用了冒号而不是分号、foreach中没有用“=>”及用“+”来连接字符串,那恭喜你,你找到了所有的错误,你已经掌握了PHP编程的基础。
  现在我来说说我是怎么回答这道题的。我当然也找出了以上这些问题,但我更进一步。比如,你有没有发现在数组索引里没有用引号将字符串括起来?虽然这不会造成严重错误,但这是一个编码错误。另外,你注意到在echo一行它使用了双引号而不是单引号吗?使用了PHP开始标志的缩写形式?并且没有用 “”而是用了“
  ”?
  在找出了实际错误后,我又在上面找到的问题后面加了注释。这足够让这份答卷从“正确”转变为“发人深省”了,这也给我的申请加了不少分,所以他们决定聘用我。(但最后我拒绝了,因为我喜欢紧凑的生活节奏,并将自己的PHP 技能奉献给我的客户,而不是一家涉猎电信市场的公司。我需要一个舞台来大展身手。)那么接下来就来看看我写的10条PHP编程习惯吧:
  1、使用单引号括起来的字符串
  当使用双引号来括字符串时,PHP解释器会对其进行变量替换、转义等操作,如“ ”。如果你只想输出一个基本的字符串,就用单引号吧,这样会节省一些资源。当然,如果你需要进行变量替换的,那就必须用双引号了,但其他情况下还是用单引号吧。
  2、字符串的输出
  你认为以下哪一条语句的运行速度最快?
  print "Hi my name is $a. I am $b";
  echo "Hi my name is $a. I am $b";
  echo "Hi my name is ".$a.". I am ".$b;
  echo "Hi my name is ",$a,". I am ",$b;echo 'Hi my name is ',$a,'. I am ',$b;也许这看起来很奇怪,但事实上最后一条的运行速度是最快的。print比echo要慢,在字符串中进行变量替换时会慢,而连接字符串要比用逗号连接来得慢,最后一句则是第一个习惯的体现。所以,不在字符串中进行变量替换不仅会加快程序运行速度,也会让你的代码在任何语法高亮显示的编辑器中显得更为易懂(变量会被高亮显示出来)。很少人知道echo的参数可以用逗号连接,且速度会比字符串连接要来得快。最后再用上第一个习惯,那这条语句就非常好了。
  3、在数组索引中使用单引号
  正如你在上面的测试题中所看到的,我指出了$x[sales]从严格意义上来说是错误的,索引应该被括起来,即$x['sales'].这是因为PHP 会将没有括起来的索引辨认为“裸”字符串,并把它解释为一个常量。当找不到该常量的定义时,才将其解释为一个字符串,所以这条语句才是可运行的。把索引括起来可以省去这部分工作,如果将来正好要用这一字符串定义常量时也就不会有错误了。我甚至听说这样做要快七倍左右的时间,虽然我没有亲自测试过。更多关于这一话题的讨论,请看PHP手册“数组”一章中的的“数组的能与不能”一节。
  4、不要使用开始标志的缩写形式
  你正在使用这样的符号吗?“<?”是非常糟糕的符号,它会引起与XML解释器的冲突。而且一旦你发布了这些代码,那么使用者就必须修改php.ini文件来打开对此符号的支持。所以实在没有理由去使用这种形式。用“<?php”吧。
  5、尽量不要使用正则表达式
  在进行常规的字符串操作时,尽可能不要去使用正则表达式(preg和ereg系列函数)。str_replace函数要比preg_replace快得多,甚至strtr函数也要比str_replace来得快。省去这些不必要的麻烦吧,你的老板会感谢你的。
  6、不要在循环声明中使用函数
  这个问题不单单出现在PHP中,你可以在其他语言的代码中经常看到:
  差:for($i=0;$i
  好:$count=count($array);for($i=0;$i<$count;$i++){……}
  这因该很好解释,但许多人就是想少写一行代码而浪费了系统资源。如果在循环声明中使用了count函数,那每次循环都会调用一次。如果你的循环次数很多,那就会浪费非常多的时间。
  7、永远不要使用register_globals和magic quotes这是两个很古老的功能,在当时(十年前)也许是一个好方法,但现在看来并非如此。老版本的PHP在安装时会默认打开这两个功能,这会引起安全漏洞、编程错误及其他的问题,如只有用户输入了数据时才会创建变量等。如今这两个功能都被舍弃了,所以每个程序员都应该避免使用。如果你过去的程序有使用这两项功能,那就尽快将其剔除吧。
  8、一定要对变量进行初始化(这里的“初始化”指的是“声明”——译者注)当需要没有初始化的变量,PHP解释器会自动创建一个变量,但依靠这个特性来编程并不是一个好主意。这会造成程序的粗糙,或者使代码变得另人迷惑,因为你需要探寻这个变量是从哪里开始被创建的。另外,对一个没有初始化的变量进行递增操作要比初始化过的来得慢。所以对变量进行初始化会是个不错的主意。
  9、对代码进行注释
  这个问题已经提过很多次了,但再多次也不够。我知道有些地方是不聘用不对代码进行注释的程序员的。我在前一次工作面试后和副总、面试官一起浏览我写的代码,当他们对我所做的代码注释印象深刻,还了解了一下我的这一习惯。一天之后,我得到了这个工作。
  我知道有些自称为PHP大师的人声称自己的代码写得很好,不需要添加什么注释。在我看来,这些人都是垃圾。学一写注释的规范和技巧,熟悉一下phpDocumentor或Doxygen之类的注释辅助软件,都是值得的。
  10、遵循一个编程规范
  关于这一点,是你需要在面试中询问你潜在的老板的,问问他们正在使用什么编程规范。PEAR?Zend?内部规范?要提及你正在使用的编程规范,不管是你自己创建的,还是目前普遍流行的一种。对于PHP这种松松垮垮的语言来说,如果没有一个好的编程规范,那么那些代码就会看起来想一堆垃圾。发臭的,令人作呕的垃圾。一些基本的规范包括空格规范、打括号匹配、命名风格等。这对任何一个追求高质量的代码的人来说都是必须的。
  有人说:“我讨厌你的4个空格的缩进。”我要说,什么?用4个空格来缩进?这比用制表符过占用3个字符的空间。更重要的是,只要是使用比记事本高级的编辑器,你可以自定义制表符的缩进值。所以每个程序员都可以以其最习惯的方式来看代码。可以时设置为4,也可以设置为0(如果你是个受虐狂)。反正我不在乎,但你就是不能用空格来缩进!
  总的来说,我希望以上这些编程习惯可以对你有所帮助。如果你想在面试中留下好印象,只需要一些小细节就可以了。
  创建高安全性PHP网站的几个实用要点
  大家都知道PHP已经是当前最流行的Web应用编程语言了。但是也与其他脚本语言一样,PHP也有几个很危险的安全漏洞。所以在这篇教 学文章中,我们将大致看看几个实用的技巧来让你避免一些常见的PHP安全问题。
  技巧1:使用合适的错误报告
  一般在开发 过程中,很多程序员总是忘了制作程序错误报告,这是极大的错误,因为恰当的错误报告不仅仅是最好的调试工具,也是极佳的安全漏洞 检测工具,这能让你把应用真正上线前尽可能找出你将会遇到的问题。
  当然也有很多方式去启用错误报告。比如在 php.in 配置文 件中你可以设置在运行时启用启动错误报告
  error_reporting(E_ALL);
  停用错误报告
  error_reporting(0);
  技巧2:不使用PHP的Weak属性 有几个PHP的属性是需要被设置为OFF的。一般它们都存在于PHP4 里面,而在PHP5中是不推荐使用的。尤其最后在PHP6里面,这些属性都被移除了。
  注册全局变量
  当 register_globals 被 设置为ON时,就相当于设置Environment,GET,POST,COOKIE或者Server变量都定义为全局变量。此时你根本不需要去写 $_POST ['username']来获取表单变量'username',只需要'$username'就能获取此变量了。
  那么你肯定在想既 然设置 register_globals 为 ON 有这么方便的好处,那为什么不要使用呢?因为如果你这样做将会带来很多安全性的问题,而且也可能 与局部变量名称相冲突。
  比如先看看下面的代码:
  if( !empty( $_POST['username'] ) && $_POST['username'] == ‘test123′ && !empty( $_POST['password'] ) && $_POST['password'] == “pass123″ ){
  $access = true;
  }
  如果运行期间, register_globals 被设置为ON,那么用户只需要传输 access=1 在一句查询字符串中就能获取到PHP脚本运行 的任何东西了。
  在.htaccess中停用全局变量
  php_flag register_globals 0
  在php.ini中停用全局变量
  register_globals = Off
  停用类似 magic_quotes_gpc, magic_quotes_runtime, magic_quotes_sybase 这些Magic Quotes在.htaccess文件中设置
  php_flag magic_quotes_gpc 0
  php_flag magic_quotes_runtime 0
  在php.ini中设置
  magic_quotes_gpc = Off
  magic_quotes_runtime = Off
  magic_quotes_sybase = Off
  技巧3:验证用户输入 你当然也可以验证用户的输入,首先必须知道你期望用户输入的数据类型。 这样就能在浏览器端做好防御用户恶意攻击你的准备。
  技巧4:避免用户进行交叉站点脚本攻击 在Web应用中,都是简单地接受用 户输入表单然后反馈结果。在接受用户输入时,如果允许HTML格式输入将是非常危险的事情,因为这也就允许了JavaScript以不可预料的 方式侵入后直接执行。哪怕只要有一个这样漏洞,cookie数据都可能被盗取进而导致用户的账户被盗取。
  技巧5:预防SQL注入攻击 PHP基本没有提供任何工具来保护你的数据库,所以当你连接数据库时,你可以使用下面这个mysqli_real_escape_string 函数。
  $username = mysqli_real_escape_string( $GET['username'] );mysql_query( “SELECT * FROM tbl_employee WHERE username = ’”.$username.“‘”);好了,在这篇简短的文章中,我们 阐述了几个开发过程中不能忽视的PHP安全性问题。但是最终是否使用,如何使用还是开发人员来决定的。希望这篇文章能帮助到你们。
 

上一篇:php中计算时间差的几种方法

下一篇:php基础知识:函数基础知识