[TOC] >[success]PHP 的真正力量来自它的函数:它拥有几千个内建的函数。 函数(function)是一段完成指定任务的已命名代码,函数可以遵照 给它的一组值或参数完成任务,并且可能返回一个值。使用函数可以 节省编译时间,因为无论调用多少次,函数只需被编译一次。 **优点** 1. 控制程序设计的复杂性 2. 提高软件的可靠性 3. 提高软件的开发效率 4. 提高软件的可维护性 5. 提高程序的重用性 6. 用户定义函数 ## 语法 ~~~ <?php function 函数名称(参数1,参数2 …){ 程序内容叙述; return 返回值; //如需函数有返回值时使用; } ?> ~~~ ## 函数的使用 ~~~ 函数名称(参数1,参数2 …); $返回值变量 = 函数名称(参数1,参数2); ~~~ ### 函数名 它是函数在程序代码中的识别名称,函数名可以是以字母或下划线 开头后跟零个或多个字母、下划线和数字的任何字符串。函数名不 区分大小写。命名函数时不可使用已声明的函数,或PHP内建的函 数名称。 ### 参数 所谓的参数就是用来把数值由函数外部传入函数体中,并用来加以 运算处理。参数之间用“ ,”号隔开。当函数不需要任何数值传入 时,可以省略参数。 ### 返回值: 当调用函数时需要它返回一些数值,那么就要函数体中用return语 句实现。格式如下: ~~~ <?php function sum($num1, $num2){ return $num1+$num2; } $i = sum(10,20); var_dump($i); ?> ~~~ ## 变量的作用域 ### 变量的能见度 所谓变量的能见度,意指变量在程序中的可作用范围。当一个变量 执行赋值动作后,会随着声明局部的差异,而有不同的作用范围。 大致上来说变量会依据声明的局部分为下列两种:局部变量和全局 变量 ### 局部变量 在函数之中声明的变量就是局部变量,并且该变量只有在函数范围之中 才能加以使用。如果其它程序局部需要调用使用该变量值时,必须透过 「return」指令,来将其传回至主程序区块以作后续处理。 ### 全局变量 在函数范围之外声明的变量为全局变量,在函数内无法直接使用全局变量,函 数要使用全局变量,必须要利用global引入。 **实例** ~~~ <?php $xbs="学并思"; function p() { global $xbs; //利用 global 引入全局变量 echo $xbs; } p(); ?> ~~~ ## 静态变量 PHP支持声明函数变量为静态的(**static**)。一个静态变量在所有对该函数的 调用之间共享,并且仅在脚本的执行期间函数第一次被调用时被初始化。要声明函数变量为静态的用关键字static。通常,静态变量的第一次使用 时赋予一个初始值。 ## 变量函数 PHP 支持变量函数的概念。这意味着如果一个变量名后有圆括号, PHP 将寻找该变量的值同名的函数,并且将尝试执行它。除了别的 事情以外,这个可以被用于实现回调函数,函数表等等。 ## 递归调用 所谓的函数递归调用,就是函数可以在其声明的执行中调用 执行自己。 函数递归调用最大的好处在于可以精简程序中繁杂重复调用程序, 并且能以这种特性来执行一些较为复杂的运算动作。 ## include 和 require 语句 通过 **include**或 **require** 语句,可以将 PHP 文件的内容插入另一个 PHP 文件(在服务器执行它之前)。 **include** (或 **require**)语句会获取指定文件中存在的所有文本/代码/标记,并复制到使用 include 语句的文件中。 **include** 和 **require** 语句是相同的,除了错误处理方面: 1. require 会生成致命错误(E_COMPILE_ERROR)并停止脚本 2. include 只生成警告(E_WARNING),并且脚本会继续 3. include_once()和require_once()函数 和`include()`语句及`require()`类似,区别是如果该文件中的代码已 经被包括了,则不会再次包括。 这两个函数用于在脚本执行期间同一个文件有可能被包括超过一次 的情况下,以避免函数重定义,变量重新赋值等问题。 >[danger]练习: 创建一个自定义函数文件,自定义一个跟var_dump类型的函数,并在其它脚本中使用