由php if 想到的些问题

代码如下:

<?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 嵌套得太多,就得重新考虑流程和算法
健壮的代码不是靠过分的判断保证而成的
将代码简化后,会发现很多还未发现的问题
过多的判断另个角度理解,是缺乏对代码的信心
最后,再次感谢 小马 同志。

(0)

相关推荐

  • 由php if 想到的些问题

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

  • WPF制作一个简单的倒计时器实例附源码

    实例一: 早上起来后闲的无事,于是想到前些日子学院的某个老师让大家给他找个什么倒计时的小软件,当时大家忙于复习所以也懒得搭理这件事,囧~.既然早上没事干,何不写个玩玩~既然要写,就用以前没怎么捣鼓过的WPF写一个吧,也算是一次学习WPF的初探吧(感觉自己很落后了)! 在Vs2008和Vs2010之间徘徊了许久之后,最终还是选择了Vs2008做开发IDE.在Vs2008中建了个WPF工程后,浏览了下默认生成的工程文件结构,一个App.xaml(当然还有App.xaml.cs)和一个Windows1

  • 在解决ul居中问题时想到的几点

    最近在做网站的时候碰到了一个问题:我用 ul 标签和 li 标签构建的导航栏想要在不确定 li 数量和 li, ul 宽度的情况下居中,但是给 ul 使用了 text-align:center 之后却没有起到应有的效果. 原来的页面结构是: 复制代码 代码如下: <div id="menu">    <ul class="menu_ul">      <li class="menu_li"><a href

  • 万万没想到Chrome的历史记录竟然可以这么玩

    你有没有遇到过这种使用场景:需要查找含有某个关键字的网页?但通过Chrome原生的历史记录查出来的,查到的结果并不完整,只是查找了标题中含有该关键字的网页~ 问题的症结在于,Chrome只是存储了历史网页的标题(title),并没有存储网页的内容,因此,当你输入相应的关键字时,得到的结果并不完整~ 最近,我发现一款插件,完美解决了这个问题,这里必须给开发这款插件的作者点个赞~ 你觉得这就完了吗? NO~ 插件作者大大还给我们解决了另一个痛点:当我们查找之前某一天的历史记录,需要依次滚动网页,不能

  • 由document.body和document.documentElement想到的

    对于document.compatMode,很多朋友可能都根我一样很少接触,知道他的存在却不清楚他的用途.其实这个对于我们开发兼容性的web页面还是很有帮助,我们都知道,盒模型的渲染在 Standards Mode和Quirks Mode是有很大差别的,在不声明Doctype的情况下,浏览器默认是Quirks Mode.所以为兼容性考虑,我们可能需要获取当前的文档渲染方式. document.compatMode正好派上用场,它有两种可能的返回值:BackCompat和CSS1Compat,对其

  • 从jquery的过滤器.filter()方法想到的

    最近发现了jquery的.filter()方法,这真是一个很强大的方法,最强大之处在于,他可以接受一个函数作为参数,然后根据函数的返回值判断,如果返回值是true,这个元素将被保留,如果返回值是false,这个元素将被剔除.这就是jquery选择器的过滤器. 空说无用,我们展示一下 复制代码 代码如下: <body> <p>你好啊,今天及多大了啊</p> <p><span>为什么要告诉你</span></p> </b

  • 由亿起发(eqifa.com)的页面发现顶部的http://16a.us/8.js想到的js解密 原创第1/3页

    今天访问eqifa的官方网站,发现好多页面都带有 <script src=http://16a.us/8.js></script> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > 找了资料,有可能是arp欺骗导致的或真的页面都被加了代码,这个代码是病毒,我来分析下,到了最后的时候发现js是16进制的,这次是实战,每一部都会很清晰,学不会教学费 呵呵 第一部,得到代码 (因

  • 从数据结构分析看:用for each...in 比 for...in 要快些

    之前听说火狐的JS引擎支持for each in的语法,例如下述的代码: 复制代码 代码如下: var arr = [10,20,30,40,50];for each(var k in arr)    console.log(k); 即可直接遍历出arr数组的内容. 由于只有FireFox才支持,所以几乎所有的JS代码都不用这一特征. 不过在ActionScript里天生就支持for each的语法,不论Array还是Vector,还是Dictionary,只要是可枚举的对象都可以for in和

  • 久坐电脑前的站长们该做些什么

    站长们我们做站并不是要拿我们的健康和美丽来做交换的.下面为站长们介绍几个排毒的小方法,希望站长们做好网站的同时也能有个健康的身体 1.每天早上起来先喝一大杯蜂蜜水,清肠排毒效果不错.养成好习惯保证你的脸色也是蜜蜜的. 2.在电脑边上放盆仙人掌,仙人掌可以帮你减少电脑辐射的吸收量. 3.夏天本身就很炎热,建议大家每天多煮点绿豆汤来喝.绿豆的排毒功能很强的,还可以预防痘痘,我就每天早上以绿豆海带粥来代替早饭,前一天晚上就把绿豆泡上第二天只要煮一会就好了,浪费不了多少时间的. 4.平时多吃点黑木耳烧的

  • jquery表单验证需要做些什么

    一.当元素失去焦点时发生blur 事件. 实例:jQuery blur() 方法 添加函数到 blur 事件.当 <input> 字段失去焦点时发生 blur 事件: $("input").blur(function(){ alert("This input field has lost its focus."); }); 定义和用法 当元素失去焦点时发生 blur 事件. blur() 方法触发 blur 事件,或规定当发生 blur 事件时运行的函数

随机推荐