由php if 想到的些问题

 更新时间:2008年03月22日 14:34:11   作者:  
在编写一段并不复杂的脚本的时候,发现了一个问题。先说说代码,它的主要功能是用 PHP 判断是否生成一段 Javascript,并使用 Cookie 记录状态。
复制代码 代码如下:

<?php 
/* PHP code */ 
header("Content-type: text/javascript"); 
if (!haveCookie('cookieName')) { 
   // ... do something 
?> 
/* Javascript code */ 
if ('undefined' == typeof document.cookie['cookieName']) { 
    setCookie('cookieName', 3600); 


   // ... do something with Javascript 
<?php 

?>

粗看起来代码已经无懈可击,我们亲爱的 小马 还是发现了问题的存在。就是在 Javascript 中的那个判断是永远为 true

复制代码 代码如下:

if ('undefined' == typeof document.cookie['cookieName']) { 
    // ... 
}

因为这段代码是在 PHP 端有个前提,就是

if (!haveCookie('cookieName'))的时候,才会在客户端显示。那么,当不满足这一条件,这段代码自然就不会扔给客户端。这样说似乎有点笼统,那么先撇开 Javascript 代码,我们就单纯使用 PHP 代码表述一下

复制代码 代码如下:

<?php 
header("Content-type: text/javascript"); 
if (!haveCookie('cookieName')) { 
   if (!haveCookie('cookieName')) { 
       setCookie('cookieName'); 
   } 

?>

这样就显得清晰了很多,并很容易就能发现问题所在 -- 我们在不经意间就多做了一次判断,虽然这是 Javascript 在客户端执行的。

总结下,本人从这段代码想到的些废话:

代码越长,不见得效率就越高
在不影响逻辑和流程的情况下,尽量将多个判断写在一起
尽量将低复杂度的函数放前判断
过多的判断容易造成程序效率降低,在判断中使用高时间复杂度的函数时尤其要注意
如果发现 if 嵌套得太多,就得重新考虑流程和算法
健壮的代码不是靠过分的判断保证而成的
将代码简化后,会发现很多还未发现的问题
过多的判断另个角度理解,是缺乏对代码的信心
最后,再次感谢 小马 同志。

相关文章

  • PHP 输出缓冲控制(Output Control)详解

    PHP 输出缓冲控制(Output Control)详解

    本文主要介绍PHP 输出缓冲控制,这里提供了详细的相关资料及简单示例代码,帮助大家学习参考,有兴趣的小伙伴可以参考下
    2016-08-08
  • dede3.1分页文字采集过滤规则详说(图文教程)续四

    dede3.1分页文字采集过滤规则详说(图文教程)续四

    dede3.1分页文字采集过滤规则详说(图文教程)续四...
    2007-04-04
  • 劣质的PHP代码简化

    劣质的PHP代码简化

    下面这一小段“劣质”的PHP代码是一道简化了的测试题。这种问题就像在问:你该怎样优化这段代码?
    2010-02-02
  • php PDO异常处理详解

    php PDO异常处理详解

    这篇文章主要给大家介绍了php中PDO异常处理的相关内容,文中给大家先进行了简单的介绍,然后通过实例代码给大家介绍了使用方式,介绍的非常详细,有需要的朋友们可以参考借鉴,感兴趣的朋友们下面来一起学习学习吧。
    2016-11-11
  • PHP实现的数据对象映射模式详解

    PHP实现的数据对象映射模式详解

    这篇文章主要介绍了PHP实现的数据对象映射模式,结合实例形式分析了php数据对象映射模式的原理、实现步骤及相关操作技巧,需要的朋友可以参考下
    2019-03-03
  • PHP 函数语法介绍一

    PHP 函数语法介绍一

    PHP的上涨支持一流的职能和关闭。真正的无名氏功能支持使用下面的语法
    2009-06-06
  • php数组合并array_merge()函数使用注意事项

    php数组合并array_merge()函数使用注意事项

    array_merge()函数在php中是对数组进行合并的,可以把多个数组合成一个数组,并且不改变原数组(www.111cn.net)的值了,但今天我在使用array_merge合并数组时碰到几个小细节上的问题,下面我举例子给各位朋友看看
    2014-06-06
  • PHP中强制类型转换的示例详解

    PHP中强制类型转换的示例详解

    这篇文章主要给大家介绍了关于PHP中强制类型转换的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • PHP 数字左侧自动补0

    PHP 数字左侧自动补0

    举例来说:员工的工号 X001 虽然 MySQL 本身的字段设定成 zerofill 的属性时,会将不足位数的部份补上0,但是这个功能只能用在数字的字段上面。 所以必要的时候只好靠PHP来进行了。
    2008-03-03
  • php重定向的三种方法分享

    php重定向的三种方法分享

    个人更倾向于header的方法,这样页面的跳转速度更快点,用户从视觉上不易察觉整页的跳转,而只是局部的变化
    2012-02-02

最新评论