由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 相关文章推荐
PHP ? EasyUI DataGrid 资料存的方式介绍
Nov 07 PHP
php读取文件内容的方法汇总
Jan 24 PHP
Nginx下配置codeigniter框架方法
Apr 07 PHP
thinkPHP中多维数组的遍历方法
Jan 09 PHP
Yii2前后台分离及migrate使用(七)
May 04 PHP
PHP递归遍历多维数组实现无限分类的方法
May 06 PHP
php版微信小店API二次开发及使用示例
Nov 12 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
Jul 26 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
Dec 21 PHP
thinkphp整合系列之极验滑动验证码geetest功能
Jun 18 PHP
PHP操作XML中XPath的应用示例
Jul 04 PHP
php数值计算num类简单操作示例
May 15 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的十大要点(上)
2009/02/04 PHP
php程序内部post数据的方法
2015/03/31 PHP
HTML中嵌入PHP的简单方法
2016/02/16 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
2016/07/13 PHP
Yii框架分页技术实例分析
2019/08/30 PHP
js刷新框架子页面的七种方法代码
2008/11/20 Javascript
JavaScript将相对地址转换为绝对地址示例代码
2013/07/19 Javascript
JS实现带缓冲效果打开、关闭、移动一个层的方法
2015/05/09 Javascript
前端js弹出框组件使用方法
2020/08/24 Javascript
Vue组件通信的四种方式汇总
2018/02/08 Javascript
微信小程序实现图片上传功能
2018/05/28 Javascript
vue-router history模式下的微信分享小结
2018/07/05 Javascript
Vue.js中 v-model 指令的修饰符详解
2018/12/03 Javascript
vue 之 css module的使用方法
2018/12/04 Javascript
详解Vue依赖收集引发的问题
2019/04/22 Javascript
ES6 class的应用实例分析
2019/06/27 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
python Django模板的使用方法(图文)
2013/11/04 Python
django自定义Field实现一个字段存储以逗号分隔的字符串
2014/04/27 Python
pycharm 使用心得(四)显示行号
2014/06/05 Python
Python实例之wxpython中Frame使用方法
2014/06/09 Python
python字符串连接方式汇总
2014/08/21 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
2019/05/09 Python
djano一对一、多对多、分页实例代码
2019/08/16 Python
使用pyinstaller逆向.pyc文件
2019/12/20 Python
Python tkinter模版代码实例
2020/02/05 Python
python新式类和经典类的区别实例分析
2020/03/23 Python
解决Keras 中加入lambda层无法正常载入模型问题
2020/06/16 Python
使用Python实现NBA球员数据查询小程序功能
2020/11/09 Python
Python+MySQL随机试卷及答案生成程序的示例代码
2021/02/01 Python
上海微创软件面试题
2012/06/14 面试题
双十佳事迹材料
2014/01/29 职场文书
最经典的商业地产项目广告词
2014/03/13 职场文书
个人收入证明模板
2014/09/18 职场文书
2014年保卫科工作总结
2014/12/05 职场文书
施工安全协议书
2016/03/22 职场文书