PHP用户定义函数
介绍
PHP具有大量的内置函数,例如数学,字符串,日期,数组函数等。也可以根据特定要求定义函数。这种功能称为用户定义功能。
函数是执行特定任务的可重用语句块。该块使用function关键字定义,并被赋予一个以字母或下划线开头的名称。可以从程序内的任意位置多次调用此函数。
语法
//define a function function myfunction($arg1, $arg2, ... $argn) { statement1; statement2; .. .. return $val; } //通话功能 $ret=myfunction($arg1, $arg2, ... $argn);
可以使用可选但任意数量的参数定义函数。但是,调用时必须提供相同数量的参数。函数的主体可以包含任何有效的PHP代码,即条件,循环等(甚至可以在函数内部定义其他函数或类)。在块中执行语句后,程序控制返回到调用它的位置,而不管功能块的最后一条语句是否作为返回存在。return语句前面的表达式将其值返回到调用环境。
用户定义函数示例
在下面的示例中显示了对usr定义函数的定义和调用sayhello()
示例
<?php //函数定义 function sayHello(){ echo "你好,世界!"; } //函数调用 sayHello(); ?>
从命令行运行时,此脚本将产生以下结果:
输出结果
你好,世界!
带参数的功能
在下面的示例中,使用两个形式参数定义函数
示例
<?php function add($arg1, $arg2){ echo $arg1+$arg2 . "\n"; } 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. "\n"; $val=add("10","20"); echo "addition: $val"; ?>
输出结果
这将产生以下结果。-
addition:30 addition:30
在第二个调用中,即使参数是字符串,PHP也会将其转换为整数并执行加法运算
具有默认参数值的函数
在定义函数时,可以分配参数的默认值。如果在调用函数时未将值分配给此类参数,则此默认值将用于在函数内部进行处理。在下面的示例中,使用默认值的参数定义函数
示例
<?php function welcome($user="Guest"){ echo "Hello $user\n"; } //覆盖默认 welcome("admin"); //使用默认 欢迎(); ?>
输出结果
这将产生以下结果。-
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\n"; echo "total=". add(1,2,3,4,5). "\n"; ?>
输出结果
这将产生以下结果。-
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\n"; echo "total=". add(1,2,3,4,5). "\n"; ?>
输出结果
这将产生以下结果。-
total= 45 total=15
在另一个功能中起作用
可以在另一个函数的主体块内定义一个函数。但是,在调用外部函数之前不能调用内部函数。
示例
<?php function hello(){ echo "Hello\n"; function welcome(){ echo "Welcome to nhooo\n"; } } //欢迎(); hello(); 欢迎(); ?>
删除注释以调用wlcome()
bforehello()
。以下错误消息暂停程序-
Fatal error: Uncaught Error: Call to undefined function welcome()
输出结果
评论该行,然后再次运行
Hello Welcome to nhooo
递归函数
调用自身的函数称为递归函数。无条件调用自身会产生无限循环,并由于堆栈已满而导致内存不足错误。后续程序调用factorial()
具有递归功能
示例
<?php function factorial($n){ if ($n < 2) { return 1; } else { return ($n * factorial($n-1)); } } echo "factorial(5) = ". factorial(5); ?>
输出结果
factorial(5) = 120