本章我们讨论PHP 函数,函数是程序中的一段代码,该功能执行特定任务,使用函数的优点是:
- 减少代码重复
- 将复杂的问题分解成更简单的部分
- 提高代码的清晰度
- 重用代码
- 信息隐藏
有两种基本类型的功能。 内置功能和用户定义的功能。 内置函数是 PHP 语言的一部分。 示例是:phpinfo()
,round()
或abs()
。 用户定义的功能由应用程序员创建,以满足其需求。 它们是使用function
关键字创建的。
PHP 定义函数
使用function
关键字创建一个功能。
simple.php
function 关键字后跟带有圆括号的函数名称。 函数的主体位于大括号之间。 我们说我们将称为函数。 如果我们调用一个函数,则会执行函数体内的语句。
该行代码调用该函数。
在这里,我们看到了脚本的结果。
PHP return
关键字
return
关键字用于从函数返回值。 函数可能会也可能不会返回值。
returning.php
我们有一个maximum()
功能。 它返回两个数字的最大值。 我们无法将其命名为 max,因为已经有内置的max()
函数。 创建此示例是出于学习目的; 我们始终希望在现实世界的程序中使用内置功能。
如果$x
变量大于$y
,则返回$x
。 否则,我们返回$y
。
maximum()
函数返回的值分配给$val
变量。
我们将两个数字的最大值打印到控制台。
PHP 函数参数
大多数函数接受参数。 参数是发送到函数的值。 函数处理值,并可能返回一些结果。
fahrenheit.php
在我们的示例中,我们将华氏温度转换为摄氏温度。 FTC()
函数接受一个参数$c
,即摄氏温度。
PHP 隐式值
PHP 函数中的参数可能具有隐式值。 如果未提供任何值,则使用隐式值。
implicit_value.php
在这里,我们创建了幂函数。 该函数有一个带有隐式值的参数。 我们可以使用一个或两个参数来调用该函数。
PHP 可变参数数量
一个函数可以接受可变数量的参数。 换句话说,有时我们不知道将有多少参数传递给该函数。 func_get_args()
函数返回一个包含函数的参数列表的数组。
从 PHP 5.6 开始,...
运算符可用于创建可变函数。
variable_arguments1.php
我们创建一个sum()
方法,该方法可以使用可变数量的参数。 该方法计算传递给该方法的值的总和。
我们计算并返回值的总和。
我们将三个,四个和五个值传递给sum()
函数。
这是输出。
variable_arguments2.php
现在,使用func_get_args()
功能创建相同的示例。
PHP 静态变量
静态变量是已静态分配的变量,其生存期遍及整个程序运行。 默认的局部变量不会在函数的连续调用中保留其值。
non_static.php
在上面的示例中,我们有一个普通的非静态变量。 每次调用函数时,我们都会增加变量。 我们调用该函数 5 次。 但是,对于函数的每次调用都会启动非静态变量。 在 5 个函数调用之后,$value
等于 2。
首次调用函数时,静态变量仅启动一次。 之后,他们保留自己的价值。
static.php
连续 5 次通话后,$value
等于 5。
PHP 匿名函数
匿名函数没有名称。
anonymous.php
我们将函数主体分配给变量。 只能通过此变量来调用函数。
注意右花括号后的分号。 这是必需的,因为构造是分配。
这是示例的输出。
通过值和引用传递参数
PHP 支持两种将参数传递给函数的方式。 默认方式是按值传递参数。 当我们按值传递参数时,该函数仅适用于值的副本。 当我们处理大量数据时,这可能会导致性能开销。
当我们通过引用传递值时,该函数会收到对实际值的引用。 修改后,原始值会受到影响。 这种传递值的方式更加节省时间和空间。 另一方面,它更容易出错。
我们应该使用哪种方式传递参数? 这取决于实际情况。 假设我们有一组数据,即员工工资。 如果我们要计算数据的某些统计信息,则无需修改它们。 我们通过价值观。 如果我们处理大量数据,并且计算速度至关重要,则可以参考。 如果我们要修改数据,例如 进行一些减薪或加薪,我们可以参考一下。
以下两个示例涵盖了这两个概念。
swap1.php
交换函数在$a
和$b
变量之间交换数字。 原始变量不受影响。
最初,这两个变量被启动。
我们称为swap()
函数。 该函数将$a
和$b
变量作为参数。
在swap()
函数内部,我们更改值。 请注意,$a
和$b
变量是在本地定义的。 它们仅在swap()
功能内部有效。
输出显示原始变量不受影响。
下一个代码示例通过引用将值传递给函数。 原始变量在swap()
功能内更改。
swap2.php
我们使用&
字符通过引用传递值。
这个例子几乎与前面的例子相同。 除&字符外。
在这里我们看到swap()
函数确实改变了变量的值。
PHP 函数递归
在数学和计算机科学中,递归是一种定义函数的方法,其中所定义的函数在其自己的定义内应用。 换句话说,递归函数调用自身以完成其工作。 递归是迭代的替代方法。 递归是功能语言中的主要方法。
一个典型的例子是阶乘的计算。
recursion.php
在此代码示例中,我们计算两个数字的阶乘。
在阶乘函数的主体内部,我们使用经过修改的参数调用阶乘函数。 该函数调用自身。
这些就是结果。
PHP 全局和局部变量
接下来,我们将讨论 PHP 中变量的范围。 范围是可以引用变量的范围。 当我们使用函数时,有两个基本范围:全局范围和局部范围。 局部作用域也称为功能作用域。
scope1.php
在函数体内定义的变量不能在函数内引用。
simple()
函数中的$value
变量为 NULL。
scope2.php
在此示例中,我们有两个具有相同名称的变量。 它们不会冲突,因为它们存在于不同的范围内。
该值在函数内部为 3,在函数外部为 4。
在下一个示例中,我们将在函数内部修改一个值。
scope3.php
我们使用global
关键字来引用在函数主体外部定义的变量。
$value
已在simple()
功能内成功修改。