[TOC]
>[success]PHP 的真正力量来自它的函数:它拥有几千个内建的函数。
函数(function)是一段完成指定任务的已命名代码,函数可以遵照 给它的一组值或参数完成任务,并且可能返回一个值。使用函数可以 节省编译时间,因为无论调用多少次,函数只需被编译一次。
**优点**
1. 控制程序设计的复杂性
2. 提高软件的可靠性
3. 提高软件的开发效率
4. 提高软件的可维护性
5. 提高程序的重用性
6. 用户定义函数
## 语法
~~~
function 函数名称(参数1,参数2 …){
程序内容叙述;
return 返回值; //如需函数有返回值时使用;
}
?>
~~~
## 函数的使用
~~~
函数名称(参数1,参数2 …);
$返回值变量 = 函数名称(参数1,参数2);
~~~
### 函数名
它是函数在程序代码中的识别名称,函数名可以是以字母或下划线 开头后跟零个或多个字母、下划线和数字的任何字符串。函数名不 区分大小写。命名函数时不可使用已声明的函数,或PHP内建的函 数名称。
### 参数
所谓的参数就是用来把数值由函数外部传入函数体中,并用来加以 运算处理。参数之间用“ ,”号隔开。当函数不需要任何数值传入 时,可以省略参数。
### 返回值:
当调用函数时需要它返回一些数值,那么就要函数体中用return语 句实现。格式如下:
~~~
function sum($num1, $num2){
return $num1+$num2;
}
$i = sum(10,20);
var_dump($i);
?>
~~~
## 变量的作用域
### 变量的能见度
所谓变量的能见度,意指变量在程序中的可作用范围。当一个变量 执行赋值动作后,会随着声明局部的差异,而有不同的作用范围。 大致上来说变量会依据声明的局部分为下列两种:局部变量和全局 变量
### 局部变量
在函数之中声明的变量就是局部变量,并且该变量只有在函数范围之中 才能加以使用。如果其它程序局部需要调用使用该变量值时,必须透过 「return」指令,来将其传回至主程序区块以作后续处理。
### 全局变量
在函数范围之外声明的变量为全局变量,在函数内无法直接使用全局变量,函 数要使用全局变量,必须要利用global引入。
**实例**
~~~
$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类型的函数,并在其它脚本中使用