由php if 想到的些问题


Posted in PHP onMarch 22, 2008
<?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 相关文章推荐
用Flash图形化数据(一)
Oct 09 PHP
基于mysql的bbs设计(二)
Oct 09 PHP
PHP读MYSQL中文乱码的解决方法
Dec 17 PHP
php 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
Nov 14 PHP
php下删除一篇文章生成的多个静态页面
Aug 08 PHP
关于php内存不够用的快速解决方法
Oct 26 PHP
ThinkPHP调用百度翻译类实现在线翻译
Jun 26 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
Sep 29 PHP
php array_values 返回数组的所有值详解及实例
Nov 12 PHP
PHP执行shell脚本运行程序不产生core文件的方法
Dec 28 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
Oct 17 PHP
php适配器模式简单应用示例
Oct 23 PHP
php实现mysql数据库备份类
Mar 20 #PHP
php 常用字符串函数总结
Mar 15 #PHP
php str_replace的替换漏洞
Mar 15 #PHP
PHP执行速率优化技巧小结
Mar 15 #PHP
请php正则走开
Mar 15 #PHP
可以在线执行PHP代码包装修正版
Mar 15 #PHP
PHP Token(令牌)设计
Mar 15 #PHP
You might like
浅析php变量作用域的一些问题
2013/08/08 PHP
微信公众号开发之语音消息识别php代码
2016/08/08 PHP
asp.net和php的区别点总结
2019/10/10 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
2019/10/16 PHP
jquery下组织javascript代码(js函数化)
2010/08/25 Javascript
jQuery 表单验证扩展代码(一)
2010/10/11 Javascript
一个基于jQuery的树型插件(OrangeTree)使用介绍
2012/05/03 Javascript
JAVASCRIPT函数作用域和提前声明 分享
2013/08/22 Javascript
深入理解javascript的执行顺序
2014/04/04 Javascript
浅谈Javascript中的Function与Object
2015/01/26 Javascript
每天一篇javascript学习小结(属性定义方法)
2015/11/19 Javascript
Bootstrap基本插件学习笔记之Alert警告框(20)
2016/12/08 Javascript
Webpack如何引入bootstrap的方法
2017/06/17 Javascript
vue.js异步上传文件前后端实现代码
2017/08/22 Javascript
原生JS写Ajax的请求函数功能
2017/12/22 Javascript
vue.js 获取select中的value实例
2018/03/01 Javascript
vue开发环境配置跨域的方法步骤
2019/01/16 Javascript
详解javascript设计模式三:代理模式
2019/03/25 Javascript
JavaScript实现轮播图片完整代码
2020/03/07 Javascript
[52:07]完美世界DOTA2联赛PWL S3 LBZS vs access 第二场 12.10
2020/12/13 DOTA
Python实现一个转存纯真IP数据库的脚本分享
2017/05/21 Python
python 实现语音聊天机器人的示例代码
2018/12/02 Python
selenium在执行phantomjs的API并获取执行结果的方法
2018/12/17 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
2019/01/23 Python
python三方库之requests的快速上手
2019/03/04 Python
在Matplotlib图中插入LaTex公式实例
2020/04/17 Python
Python ADF 单位根检验 如何查看结果的实现
2020/06/03 Python
HTML5开发动态音频图的实现
2020/07/02 HTML / CSS
农民入党思想汇报
2014/01/03 职场文书
鸿星尔克广告词
2014/03/21 职场文书
合作协议书范本
2014/04/17 职场文书
小学毕业典礼演讲稿
2014/09/09 职场文书
2014党员整改措施思想汇报
2014/10/07 职场文书
经销商会议开幕词
2016/03/04 职场文书
关于redisson缓存序列化几枚大坑说明
2021/08/04 Redis
SQL实现LeetCode(197.上升温度)
2021/08/07 MySQL