层函数,那么应用程序代码不应该声明这些函数。它只能 使用低层的函数。这被证实是一个更快的方法。 功能型技术 既然您已经了解了应如何
使用和编写函数,那么就让我们研究一些
常用的技术。 使用引用 简单点说, 引用就象 C 语言中的指针。 唯一的区别在于, PHP 中, 在 不需要象在 C 语言中那样使用 * 运 算符来解除引用。您可以将它们看成是变量、数组或对象的别名。无论执行什么操作,别名都将影响实际 的变量。 清单 1 演示了一个示例。 清单 1. 变量引用 $name = 'Amol'; $nom = &;$name; // $nom is now a reference to $name $nom .= ' Hatwar'; print("Are you $name?\n"); // Jimmy Ray parody? ?>
当将参数传递给函数时,函数接收到参数的副本。只要函数一返回,您对参数所做的任何更改都将丢失。 如果您希望直接改变参数,这会是一个
问题。清单 2
演示了一个说明该问题的示例。 清单 2. 将参数传递给函数时的问题
我们希望直接改变 $myNum ;通过将 $myNum 的引用传递给 half() 函数可以轻易地完成该
工作。但是请 记住,这并不是个好实践。使用您代码的开发人员必须跟踪所用的引用。这可能会在不经意间导致错误蔓 延。它还会影响到的函数的易用性。 更好的实践是直接在函数声明中使用引用 — 在我们的例子中,使用 half(&;$num) 代替 half($num) 。这 样,通过记住引用,您就无须记住要将参数传递给函数了。 PHP 处理幕后的一些事情。较新的 PHP 版本(从 4.0 起的后续版本)不赞成在调用时按引用传递,并且 无论如何都会发出警告。(这里有一些建议:如果您正在使用针对早期 PHP 版本编写的代码,那么最好更 新代码,而不是通过改变 php.ini 文件来更改 PHP 的行为。) 保留函数调用之间的变量 常常需要维护函数调用之间的变量值。可以使用全局变量,但是变量非常脆弱,并可能被其它函数破坏。 我们希望变量对于函数而言是局部变量,并仍然保留其值。 使用 static 关键字是一个很好的解决方案。当我希望计算在无法使用调试器的情况下有多少用户定义的 函数被执行时,我常使用这种方法。我只是改变了所有函数(当然是使用自动化的脚本),并在函数体的 第一行添加了对执行计数工作的函数的调用。清单 3 描述了该函数。
计数用户定义的函数 清单 3. 计数用户定义的函数 function funcCount() { static $count = 0; return $count++; }
刚好在脚本完成之前通过调用 funcCount() 来收集变量中的返回值,这种方法是有效的。令人吃惊的是, $count 没有复位为零;初始化静态变量的行只执行了一次。 如果您必须访问函数中的全局变量,那么在使用变量前您需要使用 global 关键字。 从 PHP
4 开始还可以这样做 — 先使用函数,然后再定义它,只要您不会试图声明该函数两次即可。 执行动态调用 执行动态调用 在许多情形中,您会发现实际上您并不知道接着必须调用哪个函数。当您在进行事件驱动的编程时,或者 当您希望在触发了
系统外的某一事件时调用特定函数时,就会出现这类情形。通过
网络进行
通信的脚本就 是这种情形的例证。 该方法类似于使用变量名。只要使用外部事件来设置变量,并且使用它作为函数(假定您已经声明了对应 的函数)。有些迷惑吗?清单 4 做了澄清。 清单 4. 动态函数调用