由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 相关文章推荐
解决phpmyadmin 乱码,支持gb2312和utf-8
Nov 20 PHP
phpmyadmin 3.4 空密码登录的实现方法
May 29 PHP
PHP中CURL方法curl_setopt()函数的参数分享
Jan 19 PHP
php多维数组去掉重复值示例分享
Mar 02 PHP
PHP实现的sqlite数据库连接类
Dec 12 PHP
PHP制作百度词典查词采集器
Jan 29 PHP
PHP伪造来源HTTP_REFERER的方法实例详解
Jul 06 PHP
thinkPHP中多维数组的遍历方法
Jan 09 PHP
php HTML无刷新提交表单
Apr 05 PHP
php四种定界符详解
Feb 16 PHP
PHP 获取 ping 时间的实现方法
Sep 29 PHP
利用ajax+php实现商品价格计算
Mar 31 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使用post数组的键值创建同名变量并赋值的方法
2015/04/03 PHP
PHP快速生成各种信息提示框的方法
2016/02/03 PHP
PHP中PDO连接数据库中各种DNS设置方法小结
2016/05/13 PHP
PHP实现一维数组与二维数组去重功能示例
2018/05/24 PHP
判断目标是否是window,document,和拥有tagName的Element的代码
2010/05/31 Javascript
JavaScript之HTMLCollection接口代码
2011/04/27 Javascript
javascript 进阶篇2 CSS XML学习
2012/03/14 Javascript
使用firebug进行调试javascript的示例
2013/12/16 Javascript
js类型转换与引用类型详解(Boolean_Number_String)
2014/03/07 Javascript
javascript限制用户只能输汉字中文的方法
2014/11/20 Javascript
浅谈JS继承_借用构造函数 &amp; 组合式继承
2016/08/16 Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
2017/06/25 Javascript
AngularJS使用ocLazyLoad实现js延迟加载
2017/07/05 Javascript
基于vue2.0动态组件及render详解
2018/03/17 Javascript
重置Redux的状态数据的方法实现
2019/11/18 Javascript
微信小程序 自定义弹窗实现过程(附代码)
2019/12/05 Javascript
手把手教你如何编译打包video.js
2020/12/09 Javascript
javascript实现数字时钟效果
2021/02/06 Javascript
详解vite+ts快速搭建vue3项目以及介绍相关特性
2021/02/25 Vue.js
python搭建简易服务器分析与实现
2012/12/15 Python
常用python数据类型转换函数总结
2014/03/11 Python
python清除指定目录内所有文件中script的方法
2015/06/30 Python
Python操作csv文件实例详解
2017/07/31 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
Python tkinter和exe打包的方法
2020/02/05 Python
python异步Web框架sanic的实现
2020/04/27 Python
Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐)
2020/05/10 Python
python获取命令行参数实例方法讲解
2020/11/02 Python
详解HTML5中的标签
2015/06/19 HTML / CSS
斯凯奇澳大利亚官网:SKECHERS澳大利亚
2018/03/31 全球购物
澳大利亚天然护肤品、化妆品和健康产品一站式商店:Nourished Life
2018/12/02 全球购物
触发器(trigger)的功能都有哪些?写出一个触发器的例子
2012/09/17 面试题
迟到检讨书400字
2014/01/13 职场文书
出生证明公证书
2014/04/09 职场文书
Nginx内网单机反向代理的实现
2021/11/07 Servers
PostgreSQL怎么创建分区表详解
2022/06/25 PostgreSQL