PHP函数

时间:2020-02-23 14:42:01  来源:igfitidea点击:

在本教程中,我们将学习PHP中的函数。

什么是函数?

函数是编写为执行特定任务的自包含代码块。

以下是我们使用函数的一些原因。

  • 将项目分成更小的部分。

  • 减少重复代码。

  • 专注于特定任务。

  • 帮助快速修复错误,因为该函数应该执行特定任务。

调用函数

我们通过写函数名称,后跟开括号和分号来调用函数。

greetings();	//calling a greetings function

在PHP中创建函数

为了在PHP中创建一个函数,我们使用关键字function,后跟函数名称,然后使用开括号。
在下面的示例中,我们创建了greetings函数,该函数在调用时将显示" Hello"。

function greetings() {
	printf("Hello");
}

greetings();	//calling function

我们还可以将参数传递给函数。
在下面的示例中,greeting函数可以使用名为$name的参数,并在传递值时显示问候消息。

function greetings($name) {
	printf("Hello %s", $name);
}

greetings("");	//calling function

函数形式参数和函数实际参数之间的区别

我们传递给函数的值称为函数的实参agrument,而接收参数的变量称为函数形式参数parameter。
但是实际上,开发人员可以互换使用这两个术语。

function greetings($name) {	//variable $name is the parameter
	printf("Hello %s", $name);
}

//calling function
greetings("theitroad");	//value "theitroad" is the argument

在上面的示例中,函数greetings中的变量" $name"是参数,调用时传递的值" theitroad"是参数。

函数参数parameter

将要接收参数值的函数的变量称为函数参数(形式参数parameter)。
该参数也可以具有默认值。

在以下示例中,我们有一个带有默认值的函数参数。

function greetings($text = "World") {	//default value
	printf("Hello %s", $text);
}

//calling function
greetings();		//no argument passed, Output: "Hello World"

//calling function
greetings("theitroad");	//argument passed, Output: "Hello "

在上面的代码中,函数参数" $text"被分配了默认值" World"。
如果在调用greetings函数时未传递参数,则将打印" Hello World"。
然后,当我们传递参数"theitroad "时,该值将分配给" $text"变量,并获得" Hello theitroad"作为输出。

函数返回值

我们使用关键字" return"从函数返回值。

在下面的函数中,我们返回一个字符串,然后将其打印出来。

function greetings($text = "World") {

	return sprintf("Hello %s", $text);	//returning string

}

$message = greetings("");	//calling function

printf($message);	//printing output

上面的代码将打印" Hello "。

函数返回多个值

我们可以使用数组从一个函数返回多个值。

function add_sub($x, $y) {
	$add = $x + $y;
	$sub = $x - $y;

	return array($add, $sub);
}

list($add_ans, $sub_ans) = add_sub(10, 20);

printf("Add = %d, Sub = %d", $add_ans, $sub_ans);

上面代码的Add = 30,Sub = -10

局部变量及其范围

在函数内部创建的变量称为局部变量,并且只能在该函数内部访问并且仅在该函数内部存在。
当我们退出该函数时,将无法访问局部变量。

function greetings() {

	//this is a local variable and only accessible inside this function
	$text = "Hello";

	printf($text);	//this will print "Hello"

}

$text = "Hi";

greetings();

printf($text);		//this will print "Hi"

全局变量及其范围

在所有函数外部创建的变量称为全局变量,即使在函数内部也可以访问。

To access a global variable inside a function we use the globalkeyword.

//global variable
$text = "Hi";

function greetings() {
	
	//local variable
	$text = "Hello";

	printf($text);	//print "Hello"

	global $text;	//global variable

	printf($text);	//print "Hi"

}

greetings();	//function call

printf($text);	//print "Hi"

静态变量及其范围

我们使用" static"关键字创建一个静态变量。
即使我们退出函数,静态变量也会记住其值。

首先让我们谈谈非静态的例子。

function disp() {
	
	$i = 0;	//non-static variable

	printf($i);

	$i++;

}

disp();	//output 0
disp();	//output 0
disp();	//output 0

在上面的代码中,我们有一个非静态变量" $i"。
当我们调用disp()函数时,变量$i设置为0。
然后我们打印$i的值,最后使用增量运算符将其递增1,然后退出该函数。

由于$i是一个非静态变量,因此,我们每次调用disp()函数$i都设置为0,因此每次获得输出0时。

现在,让我们看一下静态变量示例,该示例即使退出函数也能记住其值。

function disp() {
	
	static $i = 0;	//static variable

	printf($i);

	$i++;

}

disp();	//output 0
disp();	//output 1
disp();	//output 2

在上面的代码中,我们有一个静态变量$i
当我们第一次调用disp()函数时,变量$i设置为0。
然后我们打印$i的值,最后使用增量运算符将其递增1,然后退出该函数。

由于$i是一个静态变量,因此它会记住其最后一个值,即第一次调用时为1。
因此,当第二次调用disp()函数时,$i不会再次设置为0,而是使用其先前的值1。
因此,我们输出了0 1和2。

按值调用

在PHP中,我们可以将值传递给函数,并且该函数可以使用return语句返回一些值。
这实际上是在PHP中通过传递实际值的副本来完成的,并且在函数内部对该副本进行的任何更改均不会影响实际值。

//value is passed
function change_value($i) {
	
	$i = $i + 10;	//add 10 to the value

	printf($i);		//print new value of i

}

$i = 5;				//actual value

printf($i);			//original value of i printed

change_value($i);	//calling function, copy of i is passed, original value unchanged

printf($i);			//original value of i printed

引用调用

在某些情况下,我们希望使用实际值而不是此PHP的副本来为我们提供按引用调用的概念。
在这种情况下,将传递对实际值的引用,并且在函数内部所做的任何更改都将被反射回来。

//reference is passed, variable x refers i in this example
function change_value( &$x ) {
	
	$x = $x + 10;	//add 10 to x, this is reflected back to original variable

	printf($x);		//print the new value of x

}

$i = 5;		//actual value

printf($i);	//original value of i printed

change_value($i);	//calling function, original value of $i is now changed.

printf($i);	//new value of i printed

通过在函数中的参数$x上添加&符号,可以说传递给函数change_value()的参数是引用,而不是副本。
因此,函数内部对变量$x(表示i)所做的任何更改都会反映回变量i。

函数返回参考

我们还可以通过在函数名称前放置&符号,使PHP中的函数返回对变量的引用,而不是对值的引用。

//variable X
$X = 10;

function &refX () {
	
	global $X;

	return $X;

}

//variable i will now refer to variable X
//as the function refX returns reference.
$i =& refX();

printf($i);		//this will print 10, which is also the value of X

//now change value of X
$X = 20;

//since value of X changed so it will be reflected
//back to variable i as i is referencing X

printf($i);		//this will print 20, the new value of X

递归函数

简单来说,当一个函数调用自身时,它就是一个递归函数。

一个著名的例子是使用递归函数打印n的阶乘。

在数学中,非负数n的阶乘是所有小于或者等于n的正整数的乘积。
阶乘由n!

例如:5的阶乘为= 5! 5! = 5x4x3x2x1 = 120

function fact($n) {
	
	if ($n == 0) {
		return 1;
	}

	return $n * fact($n - 1);

}

printf("Factorial of 5 = %d", fact(5));

上面的代码将打印" Factorial of 5 = 120"。