现实生活中的比喻
想象一下你有一张写了字的纸(变量),你想让朋友帮你修改:
按值传递的过程:
你复印这张纸(创建副本)
把复印件给朋友(传递副本)
朋友在复印件上修改(函数内部操作)
朋友把修改后的复印件还给你(函数返回值)
你的原稿完全没变(原始变量不变)
// 你的代码
$myPaper = "Hello World";
$modifiedPaper = friendModifies($myPaper);
function friendModifies($friendsCopy) {
$friendsCopy = $friendsCopy . " - Modified!";
return $friendsCopy;
}第一步
$myPaper = "Hello World";
// 在内存中:创建变量 $myPaper,存储值 "Hello World"第二步
$modifiedPaper = friendModifies($myPaper);
//函数调用时发生了什么?实际上是这样执行的:
PHP 先计算 $myPaper 的值 → 得到 "Hello World"
把这个值 "Hello World" 交给函数,而不是把变量名 $myPaper 交给函数
函数说:"我接收这个值,并在内部用一个新变量 $friendsCopy 来存放它"
第三步
function friendModifies($friendsCopy) {
// 此时:$friendsCopy = "Hello World" (接收了传递过来的值)
$friendsCopy = $friendsCopy . " - Modified!";
// 现在:$friendsCopy = "Hello World - Modified!"
return $friendsCopy;
}重要概念:形参 vs 实参
实参(实际参数):调用函数时传递的值 → $myPaper
形参(形式参数):函数定义时声明的接收变量 → $friendsCopy
核心要点:函数只关心传递过来的值是什么,不关心这个值在外部叫什么变量名。
这就是为什么变量名可以不同的根本原因
这种设计的好处是:
函数可以独立使用,不依赖外部变量名
提高代码复用性:同一个函数可以被不同地方调用,使用不同的变量名
减少命名冲突:函数内部可以使用任何变量名,不会影响外部
// 你(调用者)说:
$myOrder = "披萨";
$deliveredFood = restaurantCooks($myOrder);
// 餐厅(函数)说:
function restaurantCooks($ingredients) {
// 餐厅收到的是"披萨"这个订单内容,不是你的$myOrder变量名
$cookedFood = "美味的" . $ingredients;
return $cookedFood;
}你告诉餐厅:"我要披萨"(传递值)
餐厅内部把"披萨"称为"食材"(形参名不同)
餐厅加工"食材"后返回"美味的披萨"
评论