PHP 用户自定义函数
介绍
PHP 有大量的内置函数,例如数学函数、字符串函数、日期函数、数组函数等。也可以根据具体需求定义函数。这种函数称为用户自定义函数。
函数是一段可重用的语句块,用于执行特定任务。此代码块用 function 关键字定义,并赋予一个以字母或下划线开头的名称。此函数可以从程序中的任何位置调用任意多次。
语法
//define a function function myfunction($arg1, $arg2, ... $argn) { statement1; statement2; .. .. return $val; } //call function $ret=myfunction($arg1, $arg2, ... $argn);
函数可以定义为可选的,但可以有任意数量的参数。但是,调用时必须提供相同数量的参数。函数体可以包含任何有效的 PHP 代码,例如条件语句、循环等(甚至可以在函数内部定义其他函数或类)。执行代码块中的语句后,程序控制权将返回到调用该函数的位置,而不管函数代码块的最后一条语句是否存在。return 语句前面的表达式会将其值返回给调用环境。
Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
用户自定义函数示例
下面的例子展示了用户自定义函数 sayhello() 的定义和调用。
示例
<?php //function definition function sayHello(){ echo "Hello World!"; } //function call sayHello(); ?>
这段脚本从命令行运行时将产生以下结果:
输出
Hello World!
带参数的函数
在下面的例子中,一个函数用两个形式参数定义。
示例
<?php function add($arg1, $arg2){ echo $arg1+$arg2 . "
"; } add(10,20); add("Hello", "World"); ?>
输出
这将产生以下结果:
30 PHP Warning: A non-numeric value encountered in line 3
在第二次调用中,两个字符串值作为函数参数给出。由于 PHP 不支持字符串的 + 运算符,因此会发出警告。
函数返回值
在下面的例子中,用户自定义函数处理提供的参数并将值返回给调用环境。
示例
<?php function add($arg1, $arg2){ return $arg1+$arg2; } $val=add(10,20); echo "addition:". $val. "
"; $val=add("10","20"); echo "addition: $val"; ?>
输出
这将产生以下结果:
addition:30 addition:30
在第二次调用中,即使参数是字符串,PHP 也会将其强制转换为整数并执行加法。
带有默认参数值的函数
定义函数时,可以为参数赋值默认值。如果调用函数时未为该参数赋值,则函数内部将使用此默认值进行处理。在下面的例子中,一个函数用具有默认值的形参定义。
示例
<?php function welcome($user="Guest"){ echo "Hello $user
"; } //overrides default welcome("admin"); //uses default welcome(); ?>
输出
这将产生以下结果:
Hello admin Hello Guest
在第二次调用中,函数在没有传递值的情况下被调用。在这种情况下,用户参数将采用其默认值。
具有可变数量参数的函数
可以定义一个函数,使其能够接收可变数量的参数。函数定义中形式参数的名称以 **…** 符号为前缀。下面的例子中,add() 函数将作为参数给出的数字列表相加。
示例
<?php function add(...$numbers){ $ttl=0; foreach ($numbers as $num){ $ttl=$ttl+$num; } return $ttl; } $total=add(10,15,20); echo "total= $total
"; echo "total=". add(1,2,3,4,5). "
"; ?>
输出
这将产生以下结果:
total= 45 total=15
也可以借助 **func_get_args()** 函数获取传递给函数的参数列表。我们可以运行一个 PHP 循环来遍历传递的参数列表中的每个值。在这种情况下,函数定义没有形式参数。
示例
<?php function add(){ $numbers=func_get_args(); $ttl=0; foreach ($numbers as $num){ $ttl=$ttl+$num; } return $ttl; } $total=add(10,15,20); echo "total= $total
"; echo "total=". add(1,2,3,4,5). "
"; ?>
输出
这将产生以下结果:
total= 45 total=15
函数嵌套
可以在另一个函数的主体块内定义一个函数。但是,在调用外部函数之前,不能调用内部函数。
示例
<?php function hello(){ echo "Hello
"; function welcome(){ echo "Welcome to TutorialsPoint
"; } } //welcome(); hello(); welcome(); ?>
删除注释以在 hello() 之前调用 wlcome()。以下错误消息将使程序停止:
Fatal error: Uncaught Error: Call to undefined function welcome()
输出
注释该行并再次运行
Hello Welcome to TutorialsPoint
递归函数
调用自身的函数称为递归函数。无条件地调用自身会创建无限循环,并由于堆栈溢出而导致内存不足错误。下面的程序递归调用 factorial() 函数。
示例
<?php function factorial($n){ if ($n < 2) { return 1; } else { return ($n * factorial($n-1)); } } echo "factorial(5) = ". factorial(5); ?>
输出
factorial(5) = 120