PHP 用户定义函数

phpserver side programmingprogramming更新于 2025/8/19 11:37:17

简介

PHP 拥有大量内置函数,例如数学函数、字符串函数、日期函数、数组函数等。此外,还可以根据特定需求定义函数。此类函数称为用户定义函数。

函数是执行特定任务的可重用语句块。该语句块使用 function 关键字定义,并指定以字母或下划线开头的名称。该函数可以在程序中的任何位置调用,且调用次数不限。

语法

//定义函数
function myfunction($arg1, $arg2, ... $argn)
{
   statement1;
   statement2;
   ..
   ..
   return $val;
}
//调用函数
$ret=myfunction($arg1, $arg2, ... $argn);

函数可以定义任意数量的可选参数。但是,调用时必须提供相同数量的参数。函数体可以包含任何有效的 PHP 代码,例如条件语句、循环等(甚至可以在函数内部定义其他函数或类)。执行完块中的语句后,程序控制将返回到调用它的位置,无论函数块中是否存在 return 语句。return 语句前面的表达式将其值返回给调用环境。

用户定义函数示例

以下示例展示了用户定义函数 sayhello() 的定义和调用

示例

<?php
//函数定义
function sayHello(){
   echo "Hello World!";
}
//函数调用
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
"; } //覆盖默认值 welcome("admin"); //使用默认值 welcome(); ?>

输出

这将产生以下结果。−

Hello admin
Hello Guest

第二次调用时,函数被调用时不传递值。在这种情况下,用户参数采用其默认值。

具有可变数量参数的函数

可以定义一个能够接收可变数量参数的函数。函数定义中形式参数的名称以 ... token 为前缀。以下示例包含一个 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() 之前调用 Welcome()。以下错误消息将暂停程序 −

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

相关文章