PHP 函数


在本教程中,我们将学习如何使用PHP函数使代码更有组织性和可复用性。

函数是为执行特定任务而设计的命名代码块。一旦定义了一个函数,就可以重复使用它,而不必一次又一次地复制和粘贴代码块。函数可以接受一个或多个参数,这些参数是传递给函数的值。函数可以返回一个值,以便调用的脚本可以与函数进行通信。

创建和调用函数

要创建一个函数,可以使用以下语法:

1
2
3
4
5
<?php
 
function function_name(参数1, 参数2,...){
// 函数体代码
}

函数以关键字function开头,然后是函数名。
函数名可以是任何以字母或下划线(_)开头,后跟零个或多个字母、下划线和数字的字符串。
函数名不区分大小写。它表示count()、COUNT()和Count()引用同一个函数。按照惯例,PHP的内置函数都是小写的。

在函数名后面的括号()中,可以指定一个或多个参数。如果一个函数接受多个参数,则每个参数之间必须用逗号分隔。

大括号{}中的代码是一个函数体。您可以将PHP代码、HTML代码或混合了PHP和HTML代码放在它的主体中。例如,下面的函数显示网页的标题:

1
2
3
4
<?php
function display_header($header){
echo '<h1>' . $header . '</h1>';
}

或者

1
2
3
4
5
6
<?php
function display_header($header){
?>
<h1><?php echo $header; ?></h1>
<?php
}

要调用一个函数,只需输入函数名和括号(), 如下所示:

1
display_header();

函数的参数

函数可以接受一个或多个参数。传递参数给函数有两种方法:按值传递参数和按引用传递参数。

按值传递参数

让我们看下面的例子:

1
2
3
4
5
6
7
8
<?php
function increase($x){
$x = $x + 1;
echo '在函数内 x = ' . $x .'<br />';
}
$x = 10;
increase($x);
echo '在函数外 x = ' . $x .'<br />';

输出:

1
2
在函数内 x = 11
在函数外 x = 10

因此,increase()函数没有更改$x的值。它只在函数内部改变。在本例中,我们是将$x按值传递给increase()函数。该函数实际上使用的是参数的副本。

通过引用传递参数

通过引用传递允许直接访问变量,而不是访问其副本,以便可以在函数中更改其值。若要通过引用将参数传递给函数,参数必须是变量,并在参数前面添加与号(&)。

例如,我们重新定义increase()函数,如下所示:

1
2
3
4
5
6
7
8
<?php
function increase(&$x){
$x = $x + 1;
echo '在函数内 x = ' . $x .'<br />';
}
$x = 10;
increase($x);
echo '在函数外 x = ' . $x .'<br />';

我们在要通过引用传递的参数$x前面加上一个与号(&)。通过引用传递,$x的值不仅在函数内部而且在函数外部都发生了更改。

输出:

1
2
在函数内 x = 11
在函数外 x = 11

默认参数值

PHP函数允许您将默认值传递给它的参数。
要为参数指定默认值,可以在函数声明中为参数指定标量值。注意,只接受标量值作为参数的默认值。

让我们看一下下面的例子:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
function increase(&$x,$inc = 1){
$x = $x + $inc;
}
 
$x = 10;
 
increase($x,10); // 20
echo $x;
 
increase($x); // 21
echo $x;

首先,我们创建了接受两个参数的increase()函数。
为了设置$inc参数的默认值,我们在其名称后面使用了赋值操作符(=)和默认值(1)。

第一次调用increase()函数时,我们传递了两个参数。
第二次调用increase()函数,但是这次我们忽略了第二个参数。在本例中,第二个参数将使用默认值1。

具有默认值的参数也称为可选参数。

变量参数

有时,如果参数的数量不是固定的将会很有用的,例如,get_total()函数可以计算传递的任意个参数的总数。要做到这一点,你需要使用三个方便的PHP内置函数:

func_get_args()返回一个参数数组。
func_num_args()返回参数的数量。
func_get_arg(arg_num)从参数中返回一个特定的参数。

下面的示例演示了如何使用这些函数来写get_total()函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
function get_total(){
$num = func_num_args();
$total = 0;
for($i = 0;$i < $num; $i++){
$arg = func_get_arg($i);
if(is_numeric($arg)){
$total += $arg;
}
}
return $total;
}
 
echo get_total(1,2,3); // 6

类型提示

PHP从版本5开始引入类型提示。类型提示允许函数强制将参数转换为特定的类、接口、数组或可调用的对象。

注意,类型提示不能与标量(如字符串、整数或trait)一起使用。

请看下面的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
class Person{
//
}
 
function hire(Person $p, array $info){
//
}
 
hire(new Person(),
array('type' => '全职',
'job title' => 'PHP程序员')
);

我们将在PHP类和对象章节中学习PHP类和对象。

返回值

函数通常根据参数进行处理并向调用者(另一个函数或脚本)返回一个值。要从函数返回值,可以使用return语句。

当PHP遇到return语句时,它将立即终止函数并返回值。让我们看看下面的例子:

1
2
3
4
5
6
7
8
9
10
<?php
// 求两个值中的最大值
function find_max($a,$b){
if ($a > $b)
return $a;
else
return $b;
}
$m = find_max(10,20);
echo $m; //20

find_max()函数将返回两个参数中的最大值。

如果希望返回多个值,可以返回一个数组。请看下面的例子:

1
2
3
4
5
6
7
8
9
10
11
<?php
function rgb(){
$rgb = array('red','green','blue');
return $rgb;
}
 
$color = rgb();
 
echo '<pre>';
print_r($color);
echo '</pre>';

rgb()函数将返回一个包含多个值的数组。

默认情况下,如果函数没有指定任何返回值,则返回NULL。

函数也可以返回引用而不是值。要从函数中返回引用,需要在函数名前面加上&(与号):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
 
$str = array('the','function','return-by-reference');
 
function &get($index){
global $str;
if($index > 0 && $index < count($str))
return $str[$index];
else
return null;
}
 
$elem =& get(1);
$elem = 'functions';
 
var_dump($str);

嵌套函数

在PHP中,一个函数可以嵌套在另一个函数中。

让我们看看下面的例子:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
function find_max($a,$b,$c){
 
// 求两个值中的最大值
function max($x,$y){
return $x > $y ? $x : $y;
}
 
return max(max($a,$b),$c);
}
 
echo max(3,20,7);

函数find_max()用于查找三个参数中的最大值。在find_max()函数中,我们定义了另一个名为max()的函数,它被称为嵌套函数,用于查找两个输入参数中的最大值。

变量函数

在PHP中,可以将函数名存储在字符串变量中,并使用该变量来调用该函数。
如果希望在运行时动态执行函数,变量函数非常有用。

下面的例子演示了如何使用变量函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
 
/**
* 找出两个参数中的最大值
* @param int $a
* @param int $b
* @return 最大值
*/
function find_max($a,$b){
return $a > $b ? $a : $b;
}
/**
* 找出两个参数中的最小值
* @param int $a
* @param int $b
* @return 最小值
*/
 
function find_min($a,$b){
return $a < $b ? $a : $b;
}
 
$f = 'find_max';
echo $f(10,20); // 20;
 
$f = 'find_min';
echo $f(10,20); // 10;

首先,我们定义了两个函数:find_min()和find_max()。然后,我们通过$f字符串变量去调用这些函数。

注意,您需要在变量后面加上括号,以便调用由变量的值指定的函数。

匿名函数

我们还可以定义一个没有指定名称的函数。我们称这个函数为匿名函数或闭包。
我们经常使用匿名函数作为回调参数的值。

例如,usort()函数可以使用用户定义的比较函数根据数组的值排序。

我们可以传递一个匿名函数给usort()函数,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
 
$a = array('PHP 闭包',
'PHP 匿名函数',
'PHP 函数');
 
var_dump($a);
 
// 根据字符串的长度进行排序
usort($a, function($a,$b){
return strlen($a) - strlen($b);
});
 
var_dump($a);

我们定义了一个匿名函数来比较两个字符串的长度。usort()函数根据字符串长度的顺序对$a字符串数组进行排序。

使用函数的优点

函数在PHP中非常重要。使用函数有以下几个好处:

  • 函数是可重用的——因为函数被设计用来执行特定的独立任务,以便可以在其他web应用程序中重用它。
  • 函数有助于避免重复的代码——函数通过包装逻辑并为其指定名称,有助于避免在所有位置复制和粘贴代码。
  • 函数可以使代码模块化——通过使用函数,一个大的代码脚本被分成许多易于构建、测试和维护的函数。


原文链接:https://codingdict.com/