当前位置: 首页 > 图文教程 > 网络编程 > PHP > 由php if 想到的些问题

PHP
PHP Tokenizer 学习笔记
三步搞定phpwind的静态化部署
DEDE5.3把tag标签逗号改成空格的方法分享
实例解析:从IIS的ASP迁移到APACHE的PHP
PHP读取Excel 之 Spreadsheet_Excel_Reader
PHP导出Excel 之 Spreadsheet_Excel_Writer
PDO不推广,PHP得不到发展
勇于创新,激情开拓新的未来
PHPCMS开发文档里看到PHP编码规范
一个模版引擎的诞生 开发者的思考
关于PHP开发框架
开发框架的选择和设计经验谈
框架带给我们什么(浅谈PHP框架对PHP发展的影响)
通过PHP实现DataGrid功能
php curl函数应用方法之模拟浏览器
单汉字转UNICODE
php在线打包/解包
listdir($dir) 目录读取函数
使用Apache的rewrite技术
php正则

PHP 中的 由php if 想到的些问题


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 113 ::
收藏到网摘: n/a

在编写一段并不复杂的脚本的时候,发现了一个问题。先说说代码,它的主要功能是用 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 嵌套得太多,就得重新考虑流程和算法
健壮的代码不是靠过分的判断保证而成的
将代码简化后,会发现很多还未发现的问题
过多的判断另个角度理解,是缺乏对代码的信心
最后,再次感谢 小马 同志。