PHP 简明教程

PHP 函数

1. PHP 内置函数

PHP 拥有超过 1000 个内置函数。您可以直接在脚本中调用它们来执行特定的任务。

2. PHP 自定义函数

除了使用内置的 PHP 函数外,您还可以创建属于自己的函数。

  • 函数是一段可以在程序中被重复使用的代码块。
  • 当页面加载时,函数并不会自动执行。
  • 函数只有在被调用时才会执行。

3. 创建函数

用户自定义函数的声明以关键字 function 开头,后跟函数的名称。

左花括号 { 表示函数代码的开始,右花括号 } 表示函数的结束。

注意: 函数名称不区分大小写,并且必须以字母或下划线开头。

3.1 语法

function functionName($parameter1, $parameter2) {
  // 要执行的代码
  return $value; // 选填
}

下面的示例创建了一个名为 myMessage() 的函数:

示例

function myMessage() {
  echo "Hello world!";
}

提示: 给函数起一个能够反映其功能的名称!

4. 调用函数

要调用函数,只需写出它的名称,并在后面加上括号 ()

下面的函数会输出 "Hello world!":

示例

调用 myMessage() 函数:

function myMessage() {
  echo "Hello world!";
}

myMessage();

5. PHP 函数参数

可以通过参数将信息传递给函数。参数的工作方式就像变量一样。

参数在函数名称之后的括号内指定。您可以添加任意数量的参数,只需用逗号将它们分隔开即可。

下面的示例包含一个带有一个参数($fname)的函数。当调用 familyName() 函数时,我们同时传递了一个名字(如 "Jani"),这个名字在函数内部被使用。这将输出几个不同的名字,但姓氏是相同的:

示例

function familyName($fname) {
  echo "$fname Refsnes.<br>";
}

familyName("Jani");
familyName("Hege");
familyName("Stale");
familyName("Kai Jim");
familyName("Borge");

下面的示例演示了带有两个参数($fname, $year)的函数:

示例

function familyName($fname, $year) {
  echo "$fname Refsnes. Born in $year.<br>";
}

familyName("Hege", "1975");
familyName("Stale", "1978");
familyName("Kai Jim", "1983");

6. PHP 默认参数值

下面的示例展示了如何使用默认参数。

如果我们调用 setHeight() 函数而不传递任何参数,它将使用默认值:

示例

function setHeight($height = 50) {
  echo "The height is : $height <br>";
}

setHeight(350);
setHeight(); // 将使用默认值 50

7. PHP 函数 - 返回值 (Returning values)

return 语句会立即结束函数的执行,并将一个值返回给调用它的那行代码:

示例

function sum($x, $y) {
  $z = $x + $y;
  return $z;
}

echo "5 + 10 = " . sum(5, 10) . "<br>";
echo "7 + 13 = " . sum(7, 13) . "<br>";
echo "2 + 4 = " . sum(2, 4);

8. 按引用传递参数 (Passing Arguments by Reference)

参数通常是按值传递(passed by value)的,这意味着函数内部使用的是该值的副本,传入函数的原始变量无法被更改。

但是,如果函数参数是按引用传递(passed by reference)的,对参数的更改也会同时改变传入的原始变量。要将函数参数转换为引用传递,请在参数前使用 & 运算符:

示例

使用按引用传递的参数来更新变量:

function add_five(&$value) {
  $value += 5;
}

$num = 2;
add_five($num);
echo $num;

9. 可变数量的参数 (Variadic Function)

通过在函数参数前面使用 ... 运算符,该函数就可以接受未知数量的参数。这也被称为可变参数函数(variadic function)。

可变参数在函数内部会变成一个数组。

示例

一个不知道自己会接收多少个参数的函数:

function sumMyNumbers(...$x) {
  $n = 0;
  $len = count($x);
  for($i = 0; $i < $len; $i++) {
    $n += $x[$i];
  }
  return $n;
}

$a = sumMyNumbers(5, 2, 6, 2, 7, 7);
echo $a;

您只能拥有一个可变长度的参数,并且它必须是函数的最后一个参数

示例

可变参数必须是最后一个参数:

function myFamily($lastname, ...$firstname) {
  $txt = "";
  $len = count($firstname);
  for($i = 0; $i < $len; $i++) {
    $txt = $txt."Hi, $firstname[$i] $lastname.<br>";
  }
  return $txt;
}

$a = myFamily("Doe", "Jane", "John", "Joey");
echo $a;

如果可变参数不是最后一个参数,您将会收到一个错误:

错误示例

... 运算符放在两个参数中的第一个上,会引发错误:

function myFamily(...$firstname, $lastname) {
  $txt = "";
  $len = count($firstname);
  for($i = 0; $i < $len; $i++) {
    $txt = $txt."Hi, $firstname[$i] $lastname.<br>";
  }
  return $txt;
}

$a = myFamily("Doe", "Jane", "John", "Joey");
echo $a;

10. PHP 是一门松散类型的语言 (Loosely Typed Language)

在上面的例子中,您可能注意到了,我们不需要告诉 PHP 变量的数据类型。

PHP 会根据变量的值自动将其关联到对应的数据类型。由于不需要设置数据类型,您可以执行例如将字符串与整数相加的操作,而不会导致错误。

从 PHP 7 开始,引入了类型声明(type declarations)。这为我们提供了一个选项,可以在声明函数时指定预期的参数数据类型;同时通过添加严格声明(strict declaration),如果数据类型不匹配,它将抛出“致命错误(Fatal Error)”。

要指定严格模式,我们需要设置 declare(strict_types=1);这必须写在 PHP 文件的最顶端(第一行)。

在下面的示例中,我们向函数发送了一个数字和一个字符串,但此时我们添加了严格声明:

示例

<?php declare(strict_types=1); // 严格要求

function addNumbers(int $a, int $b) {
  return $a + $b;
}

echo addNumbers(5, "5 days"); 
// 由于 "5 days" 不是整数,这里会抛出一个错误
?>

严格声明强制开发者按预期的方式使用变量类型。

11. PHP 返回类型声明 (Return Type Declarations)

PHP 同样支持对 return 语句进行类型声明。

要声明函数的返回数据类型,请在声明函数时,在左花括号 { 前面加上冒号 : 以及对应的数据类型。

在下面的示例中,我们为函数指定了返回类型(float):

示例

<?php declare(strict_types=1); // 严格要求

function addNumbers(float $a, float $b) : float {
  return $a + $b;
}

echo addNumbers(1.2, 5.2);
?>

您也可以指定与参数类型不同的返回类型,但请确保返回的确实是正确的类型:

示例

<?php declare(strict_types=1); // 严格要求

function addNumbers(float $a, float $b) : int {
  return (int)($a + $b);
}

echo addNumbers(1.2, 5.2);
?>