前面的博文中多次提到和用到函数,现在我们就来了解一下 PHP 中的函数。

定义函数

在 PHP 中,函数使用 function 关键字来定义,通常还有函数名、参数列表、函数体组成。函数返回值不需要声明,如果没有返回值则省略 return 语句即可。

定义函数的基本格式为:


<?php
	function 函数名(参数1, 参数2, 参数3...) {
		函数体
	}
?>

举个栗子:


<?php
	function foo($str, $pri) {
		echo str;
		return "ret";
	}
	$a = foo("some string", true);
	echo $a;
?>

参数默认值

函数的参数允许设定默认值,在定义函数是直接在参数右侧加上 = 默认值 即可,例如 function foo($a, %b = 'b'){}

注意 : 设定参数默认值需要从参数列表右侧开始,也就是说如果为某一个参数设定了默认值,那么它右侧不能出现没有默认值的参数,形如 function foo($a = '1', %b){} 这样的函数是错误的。

参数传递

参数传递支持两种方式: 值传递、引用传递。但是要注意在 PHP 5 之前的版本不支持引用传递的方式。

  • 值传递指的是将实参的值复制到形参中,函数内部的操作不影响实参。

  • 引用传递指的是将实参内存地址传入,在函数内部的操作直接影响到实参的值。

也就是说值传递中,实参与形参分别指向两块不同的内存区域,而引用传递则指向同一块内存区域。

要进行引用传递,则需要在形参前添加 & 符号。


<?php 
	function foo1($var) { # 值传递
		$var++;
		echo "foo1:".$var."\n";
	}
	function foo2(&$var) { # 引用传递
		$var++;
		echo "foo2:".$var."\n";
	}
	$a = 10;
	echo $a."\n";
	foo1($a);
	echo $a."\n"; # 值未改变
	
	$b = 20;
	echo $b."\n";
	foo2($b);
	echo $b."\n"; # 值被改变
?>

变量函数

$$ 类似,我们也可以用过 $var() 的形式来调用函数,PHP 会取出 $var 的值并寻找与这个值同名的函数。举个栗子:


<?php 
	function foo($var) {
		echo $var;
	}
	
	$a = "foo";
	$a("meniny");
?>