PHP 函数
在本教程中,我们将学习如何使用PHP函数使代码更有组织性和可复用性。
函数是为执行特定任务而设计的命名代码块。一旦定义了一个函数,就可以重复使用它,而不必一次又一次地复制和粘贴代码块。函数可以接受一个或多个参数,这些参数是传递给函数的值。函数可以返回一个值,以便调用的脚本可以与函数进行通信。
创建和调用函数
要创建一个函数,可以使用以下语法:
<?php function function_name(参数1, 参数2,...){ // 函数体代码 }
函数以关键字function开头,然后是函数名。
函数名可以是任何以字母或下划线(_)开头,后跟零个或多个字母、下划线和数字的字符串。
函数名不区分大小写。它表示count()、COUNT()和Count()引用同一个函数。按照惯例,PHP的内置函数都是小写的。
在函数名后面的括号()中,可以指定一个或多个参数。如果一个函数接受多个参数,则每个参数之间必须用逗号分隔。
大括号{}中的代码是一个函数体。您可以将PHP代码、HTML代码或混合了PHP和HTML代码放在它的主体中。例如,下面的函数显示网页的标题:
<?php function display_header($header){ echo '<h1>' . $header . '</h1>'; }
或者
<?php function display_header($header){ ?> <h1><?php echo $header; ?></h1> <?php }
要调用一个函数,只需输入函数名和括号(), 如下所示:
display_header();
函数的参数
函数可以接受一个或多个参数。传递参数给函数有两种方法:按值传递参数和按引用传递参数。
按值传递参数
让我们看下面的例子:
<?php function increase($x){ $x = $x + 1; echo '在函数内 x = ' . $x .'<br />'; } $x = 10; increase($x); echo '在函数外 x = ' . $x .'<br />';
输出:
在函数内 x = 11 在函数外 x = 10
因此,increase()函数没有更改$x的值。它只在函数内部改变。在本例中,我们是将$x按值传递给increase()函数。该函数实际上使用的是参数的副本。
通过引用传递参数
通过引用传递允许直接访问变量,而不是访问其副本,以便可以在函数中更改其值。若要通过引用将参数传递给函数,参数必须是变量,并在参数前面添加与号(&)。
例如,我们重新定义increase()函数,如下所示:
<?php function increase(&$x){ $x = $x + 1; echo '在函数内 x = ' . $x .'<br />'; } $x = 10; increase($x); echo '在函数外 x = ' . $x .'<br />';
我们在要通过引用传递的参数$x前面加上一个与号(&)。通过引用传递,$x的值不仅在函数内部而且在函数外部都发生了更改。
输出:
在函数内 x = 11 在函数外 x = 11
默认参数值
PHP函数允许您将默认值传递给它的参数。
要为参数指定默认值,可以在函数声明中为参数指定标量值。注意,只接受标量值作为参数的默认值。
让我们看一下下面的例子:
<?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()函数:
<?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)一起使用。
请看下面的例子:
<?php class Person{ // } function hire(Person $p, array $info){ // } hire(new Person(), array('type' => '全职', 'job title' => 'PHP程序员') );
我们将在PHP类和对象章节中学习PHP类和对象。
返回值
函数通常根据参数进行处理并向调用者(另一个函数或脚本)返回一个值。要从函数返回值,可以使用return语句。
当PHP遇到return语句时,它将立即终止函数并返回值。让我们看看下面的例子:
<?php // 求两个值中的最大值 function find_max($a,$b){ if ($a > $b) return $a; else return $b; } $m = find_max(10,20); echo $m; //20
find_max()函数将返回两个参数中的最大值。
如果希望返回多个值,可以返回一个数组。请看下面的例子:
<?php function rgb(){ $rgb = array('red','green','blue'); return $rgb; } $color = rgb(); echo '<pre>'; print_r($color); echo '</pre>';
rgb()函数将返回一个包含多个值的数组。
默认情况下,如果函数没有指定任何返回值,则返回NULL。
函数也可以返回引用而不是值。要从函数中返回引用,需要在函数名前面加上&(与号):
<?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中,一个函数可以嵌套在另一个函数中。
让我们看看下面的例子:
<?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中,可以将函数名存储在字符串变量中,并使用该变量来调用该函数。
如果希望在运行时动态执行函数,变量函数非常有用。
下面的例子演示了如何使用变量函数:
<?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()函数,如下所示:
<?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应用程序中重用它。
- 函数有助于避免重复的代码——函数通过包装逻辑并为其指定名称,有助于避免在所有位置复制和粘贴代码。
- 函数可以使代码模块化——通过使用函数,一个大的代码脚本被分成许多易于构建、测试和维护的函数。