PHP函数
在本教程中,我们将学习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 global
keyword.
//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"。