专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »PHP教程 » 用 PHP 开发健壮的代码: 有效地使用变量 第 2 部分 »正文

用 PHP 开发健壮的代码: 有效地使用变量 第 2 部分

来源: 发布时间:星期一, 2009年1月12日 浏览:43次 评论:0
  “用 PHP 开发健壮代码”是有关解决大中型应用实际问题系列文章在本文中PHP 老手 Amol Hatwar 讨论了如何有效地使用变量他还演示了如何通过使用 PHP 中可变变量名来构造配置文件解析器以便简化脚本配置  在我篇文章中我研究了在规划、设计甚至编写代码期间必须考虑些原因在本文中您将真正接触到实际代码并可以看到实际运行中些东西如果您还没有看过前篇文章那么最好现在就看

  正确处理变量

  变量和是任何计算机语言必不可少要素有了变量您可以将数据抽象化;有了您可以将几行代码抽象化正如 Bruce Eckel 在他书籍 C 编程思想中所说那样所有编程语言都提供抽象汇编语言是对底层机器小抽象随后许多所谓 命令式语言(如 Fortran、BASIC 和 C)是对汇编语言抽象

  编程语言提供抽象种类和质量直接关系到您所能解决问题复杂程度理解 PHP 如何处理变量和将有助于您有效地使用它们

  名称里有什么?

  就象我在前篇文章中提到那样命名约定和编码约定是重要无论您使用什么命名约定请记住要在项目中严格遵守它如果您使用应用得最广泛命名约定那么您代码将被更多人所接受

  对变量进行命名时在包括脚本时要特别注意不要覆盖正在使用变量在大型应用当增加新功能时这是常见根源防止这问题最佳办法就是使用前缀把变量所在模块名称缩写作为前缀来使用例如如果个处理投票模块中有个保存用户标识变量那么您可以将该变量命名为 $poll_userID或 $pollUserID

  理解 PHP 变量

  PHP 是解释型语言这有许多好处很快您将学习利用其中个很明显好处是:它使您省掉了设计-编码-编译-测试周期 — 您在编辑器中编写任何代码都立即可使用然而最重要好处是您不用担心变量类型以及如何在内存中管理这些变量所有分配给脚本内存在执行完脚本后都由 PHP 自动收回此外可以对变量执行许多操作而不必知道变量类型 清单 1中代码在 PHP 中工作十分正常但在 C 和 Java 语言中会抛出大堆消息:

  清单 1. 带变量样本 PHP 代码

<?php
$myStr = 789696;            // An eger.
$myVar = 2;              // Another eger.
$myStr = "This is my favorite band: "; // Strings are more fun.
$myStr = $myStr . "U" . $myVar;    // Doing this is OK, too.
echo "$myVarn";
?>


  安装完 PHP 后如要运行运行代码可首先将该代码保存为个 .php 文件再将该文件放置在 Web 服务器上然后将浏览器指向该文件更好办法是安装 PHP CGI 版本然后通过在 shell 或命令提示符下输入以下命令并用包含您脚本文件名替代 script-name这样就可以运行该脚本了

path-to-php/php
    script-name
      


  该代码能够正常工作 PHP 是类型宽松语言用通俗易懂英语可以不考虑变量类型可以把串赋值给整数以及毫不费力地用较大串替代较小这在象 C 这样语言中是不可能事情在内部PHP 将变量所拥有数据和类型分开存储类型存储在单独表中每当出现包含区别类型表达式时PHP 自动确定员想要做什么接着更改表中类型然后自动对表达式求值

  介绍个常见小问题

  不用担心类型固然很好但有时那也会使您陷入真正麻烦如何回事呢?这里有个实际举例:我常常必须把在基于 Windows PC 上创建内容移到 Linux 系统以便能在 Web 上使用它们基于 Windows 文件系统在处理文件名时是不区分大小写文件名 DefParser.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
$file_name = 0;
(0 $file_name ) {
echo "The code is in trouble ...n"; // This text prs _disibledevent= trim($value);  // Define the said variable. 
}
fclose($fp) or die("Can't close file $file_name");
}
?>


  用正则表达式除去 # 号尽管这里表达式很简单但要知道复杂正则表达式会消耗大量 CPU 时间此外为每页反复地解析配置文件不是个好决策更好选择是:使用变量或定义语句将已解析输出存储为 PHP 脚本我倾向于使用 进行定义旦设置了值就不能在运行时更改它可以在 参考资料中找到个能够根据您需要加以修改实现



  结束语

  既然知道了如何有效地使用变量那么您可以着手编写些较大在本系列篇文章中我将研究和 API 设计在下次见面以前希望您编程愉快!



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: