如何在PHP中使用函数(附代码示例)

122 阅读2分钟

函数是编程中最重要的概念之一。

你可以用函数将多条指令、多行代码组合在一起,并给它们一个名字。

例如,你可以制作一个发送电子邮件的函数。例如,我们把它叫做sendEmail ,我们这样定义它:

function sendEmail() {
  //send an email
}

并且你可以通过使用这种语法在其他地方调用它

sendEmail();

你可以向一个函数传递参数,例如,当你发送电子邮件时,你想把它发送给某人,所以你把电子邮件作为第一个参数:

sendEmail('test@test.com');

在函数定义中,我们以这种方式获得这个参数(我们在函数定义中称它们为参数,而在调用函数时称它们为参数):

function sendEmail($to) {
  echo "send an email to $to";
}

你可以通过用逗号分隔来发送多个参数:

sendEmail('test@test.com', 'subject', 'body of the email');

而且我们可以按照定义的顺序获得这些参数:

function sendEmail($to, $subject, $body) {
  //...
}

我们可以选择性地设置参数的类型:

function sendEmail(string $to, string $subject, string $body) {
  //...
}

参数可以有一个默认值,所以如果它们被省略了,我们仍然可以有一个参数的值:

function sendEmail($to, $subject = 'test', $body = 'test') {
  //...
}

sendEmail('test@test.com')

一个函数可以返回一个值。一个函数只能返回一个值,不能多于一个。你可以用return 关键字来做到这一点。如果省略,函数返回null

返回值是超级有用的,可以知道在函数中完成的工作的结果,或者在调用函数后使用其结果:

function sendEmail($to) {
	return true;
}

$success = sendEmail('test@test.com');

if ($success) {
  echo 'email sent successfully';
} else {
  echo 'error sending the email';
}

我们可以用这种语法选择性地设置函数的返回类型:

function sendEmail($to): bool {
	return true;
}

当你在一个函数中定义一个变量时,该变量是函数的局部变量,这意味着它在外面是不可见的。当函数结束时,它只是停止存在:

function sendEmail($to) {
	$test = 'a';
}

var_dump($test); //PHP Warning:  Undefined variable $test

在函数外定义的变量在函数内是无法访问的。

这执行了一个良好的编程实践,因为我们可以确保函数不会修改外部变量并引起 "副作用"。

相反,你从函数中返回一个值,而调用该函数的外部代码将负责更新外部变量。

像这样:

$character = 'a';

function test() {
  return 'b';
}

$character = test();

你可以把一个变量的值作为参数传递给函数:

$character = 'a';

function test($c) {
  echo $c;
}

test($character);

但你不能从函数内部修改这个值。

它是通过值传递的,这意味着函数收到的是它的副本,而不是对原始变量的引用。

使用这种语法仍然可以做到这一点(注意我在参数定义中使用了& ):

$character = 'a';

function test(&$c) {
  $c = 'b';
}

test($character);

echo $character; //'b'

到目前为止,我们定义的函数是命名函数

它们有一个名字。

我们还有匿名函数,它在很多情况下都很有用。

它们本身没有名字,但它们被分配给一个变量。要调用它们,你要在最后用括号调用该变量:

$myfunction = function() {
  //do something here
};

$myfunction()

请注意,你需要在函数定义后面加上一个分号,但它们的工作方式与命名函数的返回值和参数一样。

有趣的是,它们提供了一种方法,可以通过use() ,访问定义在函数之外的变量:

$test = 'test';

$myfunction = function() use ($test) {
  echo $test;
  return 'ok';
};

$myfunction()

另一种函数是箭头函数

箭头函数是一个匿名函数,只有一个表达式(一行),并隐含地返回该表达式的值

你以这种方式定义它:

fn (arguments) => expression;

这里有一个例子:

$printTest = fn() => 'test';

$printTest(); //'test'

你可以向箭头函数传递参数:

$multiply = fn($a, $b) => $a * $b;

$multiply(2, 4) //8

请注意,正如下一个例子所示,箭头函数可以自动访问包围范围内的变量,而不需要use()

$a = 2;
$b = 4;

$multiply = fn() => $a * $b;

$multiply()

当你需要传递一个回调函数时,箭头函数是超级有用的。我们将在后面看到如何使用它们来执行一些数组操作。

所以我们总共有3种函数:命名函数匿名函数箭头函数

每一种都有它的位置,随着时间的推移和实践的进行,你会学会如何正确使用它们。