PHP - 函数传递:初学者指南

你好,有抱负的PHP开发者们!今天,我们将踏上一段激动人心的旅程,探索PHP中传递函数的奥秘。如果你是编程新手,不用担心——我会成为你的友好向导,一步一步地解释,并提供大量的示例。那么,让我们开始吧!

PHP - Passing Functions

什么是可调用函数?

在我们开始之前,先来理解一下“传递函数”是什么意思。在PHP中,函数可以被当作数据对待,这意味着我们可以将它们作为参数传递给其他函数。这些可传递的函数通常被称为“可调用”或“回调”。

想象你有一个魔术箱(一个函数),它可以根据你放入的指令(另一个函数)表演不同的魔术。这就是我们在传递函数时所做的!

array_map():轻松转换数组

让我们从最常用的传递回调函数的函数之一开始:array_map()

array_map() 是做什么的?

array_map() 将回调函数应用于数组的每个元素,并返回一个包含结果的新数组。

示例 1:加倍数字

$numbers = [1, 2, 3, 4, 5];

$doubled = array_map(function($n) {
return $n * 2;
}, $numbers);

print_r($doubled);

输出:

Array
(
[0] => 2
[1] => 4
[2] => 6
[3] => 8
[4] => 10
)

在这个示例中,我们传递了一个匿名函数(也称为闭包)给 array_map()。这个函数接收每个数字并将其乘以2。结果是得到一个所有数字都加倍的新数组。

示例 2:首字母大写名称

$names = ['alice', 'bob', 'charlie'];

$capitalized = array_map('ucfirst', $names);

print_r($capitalized);

输出:

Array
(
[0] => Alice
[1] => Bob
[2] => Charlie
)

这里,我们传递了内置的PHP函数 ucfirst 作为字符串。array_map() 将此函数应用于每个名称,将首字母大写。

call_user_func():函数调用的瑞士军刀

call_user_func() 是一个多功能函数,允许你调用任何可调用的函数或方法。

示例 3:调用简单函数

function greet($name) {
return "Hello, $name!";
}

$result = call_user_func('greet', 'World');
echo $result;  // 输出:Hello, World!

在这个示例中,我们传递了函数的名称('greet')作为字符串,后面跟着它的参数。

示例 4:调用对象的方法

class Greeter {
public function sayHi($name) {
return "Hi, $name!";
}
}

$greeter = new Greeter();
$result = call_user_func([$greeter, 'sayHi'], 'PHP');
echo $result;  // 输出:Hi, PHP!

在这里,我们在调用一个对象的方法。我们传递一个包含对象和方法名称的数组,后面跟着参数。

usort():使用回调进行自定义排序

usort() 是一个强大的函数,允许你使用自定义比较函数来排序数组。

示例 5:对对象数组进行排序

class Person {
public $name;
public $age;

public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
}

$people = [
new Person('Alice', 30),
new Person('Bob', 25),
new Person('Charlie', 35)
];

usort($people, function($a, $b) {
return $a->age - $b->age;
});

foreach ($people as $person) {
echo "{$person->name}: {$person->age}\n";
}

输出:

Bob: 25
Alice: 30
Charlie: 35

在这个示例中,我们根据年龄对 Person 对象数组进行排序。回调函数比较两个人的年龄,并返回一个负值、零或正值来确定它们的顺序。

将回调传递给用户定义的函数

现在我们已经看到了PHP内置函数如何使用回调,让我们创建一个接受回调的用户定义函数。

示例 6:创建自定义 map 函数

function myMap($array, $callback) {
$result = [];
foreach ($array as $item) {
$result[] = $callback($item);
}
return $result;
}

$numbers = [1, 2, 3, 4, 5];

$squared = myMap($numbers, function($n) {
return $n * $n;
});

print_r($squared);

输出:

Array
(
[0] => 1
[1] => 4
[2] => 9
[3] => 16
[4] => 25
)

在这个示例中,我们创建了自己的 myMap 函数,其行为类似于 array_map。它接受一个数组和一个回调函数,将回调应用于每个元素,并返回一个包含结果的新数组。

结论

恭喜你!你已经迈出了在PHP中传递函数世界的第一步。我们涵盖了 array_map()call_user_func()usort(),甚至创建了我们自己的接受回调的函数。

记住,传递函数是一种强大的技术,它允许你编写更灵活、可重用的代码。它就像是你编程工具包中的瑞士军刀——多功能且随时准备应对不同的任务!

在你继续PHP之旅时,你会发现许多使用这些技术的机会。继续练习,很快你就能像专业人士一样传递函数!

以下是我们在本文中讨论的函数的快速参考表:

函数 描述 示例用例
array_map() 将回调应用于数组的所有元素 转换数组元素
call_user_func() 调用带有参数的回调 动态调用函数或方法
usort() 使用用户定义的比较函数对数组进行排序 自定义数组排序

快乐编码,并记住——在PHP的世界里,函数是你的朋友!

Credits: Image by storyset