用PHP开发健壮的代码:有效地使用变量,第2部分
.php和defparser.php 指向Windows上的同一文件。在Linux操作系统上,它们指向不同的文件。您可能提倡文件名要么全用大写,要么全用小写,但最好的做法应该是使大小写保持不变。
解决这个小问题 假设您想要一个函数,它能在不考虑大小写的情况下检查给定文件是否存在于某个目录中。首先,将这个任务分解成一些简单的步骤。分解代码可能听起来有些可笑,但它确实有助于您在编写代码时将主要精力放在这段代码上。另外,在纸上重写步骤始终比重写代码容易得多: 获取源目录中的所有文件名 过滤掉 . 和 .. 目录 检查目标文件是否存在于该目录中 如果文件存在,则获取具有正确大小写的文件名 如果名称不匹配,则返回 false 要读取目录的内容,需要使用 readdir() 函数。可以在PHP手册(请参阅 参考资料)中获取有关该函数的更多细节。至于现在,只要知道: readdir() 在每次调用时会逐个返回给定目录中所有文件的名称。在列出了所有的文件名后,它返回 false。您将使用一个循环,该循环在 readdir() 返回 false 时终止。 但这样就够了吗?请记住,PHP 是类型宽松的语言,这意味着会将整型值 0 与 false 视为相同(甚至 C 也把 0 和布尔值 false 视为等价)。问题不是该代码是否能正常工作;想象一下,如果文件的名称是 0 会如何!该脚本会过早终止。可以使用以下脚本( 清单 2)来确定 0 与布尔值 false 的等价性: 清单 2. 确定 0 与布尔值 false 是否等价的脚本
那么您可以做什么呢?您知道PHP会在内部存储类型,而如果能够访问这些类型的话,问题就解决了。布尔值 false 和整型值 0 明显是不同的。 PHP有一个gettype()函数,但让我们在这里选择更简单的方法。您可以使用 ===运算符(是的,有三个等号)。不同之处在于该运算符同时比较数据的值和类型。如果您对此觉得有些疑惑,PHP还有 !== 运算符。只有PHP4中才有这些新型运算符和gettype() 函数。 清单 3显示了解决该问题的完整代码: 清单 3. 完整代码
观察中得到的经验 我不打算对 清单 3中各个函数的功能加以说明,相反,我鼓励您查阅PHP手册(请参阅 参考资料)。当您使用不熟悉的函数时,假设的参数与返回值的类型会是另一个错误根源。我没有对PHP中的内置函数加以说明,而是打算说明一些不太一目了然的事情。 当终止条件中涉及不同的变量类型时,通过使用 ===和 !==运算符进行强类型检查是很重要的。 由各部分组成的代码 我本来可以将整个脚本编写为一个函数,但这里我却把代码分割成两个函数。还记得前一篇文章中的“分而治之”规则吗?我这么做正是因为每个函数所起的作用不同。如果您用其它 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |