所有分类
  • 所有分类
  • 后端开发
PHP函数参数:按值传vs按引用传,如何玩转?

PHP函数参数:按值传vs按引用传,如何玩转?

函数参数允许向函数传递数据,有两种传递方式:按值传递:原始变量不受函数修改影响。函数的参数函数参数允许你在调用函数时向函数传递数据。这意味着函数内部对参数所做的任何更改都不会影响原始变量。这将允许函数直接访问原始变量。通过理解如何使用函数参

PHP里的函数参数好神奇,可以让我们把东西交给函数处理。简单说,有两种传送方式:按值传和按引用传。举个例子,按值传就像是你把衣服给我,我穿上后,衣服还是你那件,没变;但如果用的是按引用传,我就可以直接修改你的衣服。今天咱们就来聊聊怎么玩转这个功能,还有怎么在实际编程中巧妙运用这两种方法哈。

默认的按值传递

你知道吗?在PHP里,给函数传递的参数就好比生活中去超市买东西,值才最重要。就拿increment()这个函数来说,它的本事可不小,能把给定的数翻个倍!

php
functionincrement($number){
$number++;
return$number;
PHP函数参数:按值传vs按引用传,如何玩转?
}
$originalNumber=10;
给新数加点1,就变老了,放变量$newNumber里存着。
"原始数字是$originalNumber!
";//输出:OriginalNumber:10
新的数是:$newNumber结果出来!就是:11。

刚刚那个例子里头,我明明在`increment()`这函数里给`$number`添了点儿东西,但原来的`$originalNumber`却没啥变化。咋回事儿呀?其实就是因为我们只是把数字作为参数传进去的,所以里面怎么变都不影响外面~

通过引用传递参数

除了直接给数直输值外,PHP还有另一招传值绝活儿哦——就是在参数前添个’&’号。这样做,函数就可以直接操控原变量!下面就让我们通过实例来看看这是怎么回事吧:

那个叫incrementByReference的玩意儿,其实就是帮你把数加1。

给原数字加个1;

“原数字是$originalNumber:11。”

让我给你复习下`$originalNumber`被`incrementByReference()`函数接收的这个例子哈。你瞧见没,那`&`号摆在前头,这意味着我们其实并没有直接传递`$originalNumber`,而是它的“影子”。所以说,只要给`$number`加上什么,就是给`$originalNumber`加上什么

实战案例:表单验证中的应用

function increment($value) {
    $value++;
}
$number = 10;
increment($number);
echo $number; // 输出:10

用APP时经常要检查后才能上传信息,这个过程叫做表单验证。它就是看看我们填得对不对,有没出错。这个环节,有时候是通过数值传过去,有时候是通过引用传的。

咱们想想看,如果表格里面需要填写名字、邮箱和错误信息?检查的时候,我们一般的做法就是只传名字和邮箱给验证函数,但错误信息就有点麻烦了。因为名字和邮箱在验证的时候是固定不变的,但错误信息却可能会变,这样才能更准确地记录验证过程中的失败情况。

别说我没提醒你我们还得看看你填的姓名跟邮箱有没错。如果错了,后面那些麻烦的错误信息可就在$errors里面等着你

//验证姓名和邮箱

if(empty($name)){

$errors[]=”姓名不能为空”;

}

这不,如果电子邮箱地址不对的话,还是先弄好它再说!

$errors[]=”邮箱格式不正确”;

//其他验证规则…

//返回验证结果

returnempty($errors);

function incrementByReference(&$value) {
    $value++;
}
$number = 10;
incrementByReference($number);
echo $number; // 输出:11

//表单数据

$name=$_POST[‘name’];

$email=$_POST[’email’];

$errors=[];

//进行表单验证

确认无误,直接过关吧(名字跟邮箱都写对哟)。

function validateForm($data) {
    // 按值传递
    $name = $data['name'];
    $email = $data['email'];
    if (empty($name)) {
        // 按引用传递,可以在函数外部修改
        $data['errors'][] = '名称不能为空';
    }
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $data['errors'][] = '无效的电子邮件地址';
    }
}

echo”表单验证通过”;

}else{

//输出错误信息

foreach($errorsas$error){

echo”$error

“;

就是说,这个例子里面,`validateForm()`函数是用名字啊、邮箱啊还有那个什么‘errormessages’数组当作参数的。名字和邮箱就是一般的变量,‘errormessages’,是用引用传递过去的。然后你懂的?就算在函数里改了它,外面还是看得见滴。这样一来,我们验证完表格之后,就可以直接显示错误消息咯~

总结

记住,学习PHP参数传递可不是闹着玩儿的,这关系到代码的稳定性和易维护性。在传递参数前,要思考下这个参数是否需要变动,然后决定到底该不该传。我们经常采用值传输方式,确保参数的不变性。当然,如果你觉得有必要,也可以试试引用传输,这样就可以直接修改原始数据了,有时候还是挺方便的。

学会用好函数参数,编程就变得轻松有趣又高效!平时写程序,得清楚什么时候该用什么参数传法来处理各种数据和逻辑。搞懂了这个,编写代码的效率自然飙升!

原文链接:https://www.icz.com/technicalinformation/web/2024/04/15770.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?