千家信息网

PHP的变量赋值是怎么设置的

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章给大家介绍PHP的变量赋值是怎么设置的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。PHP的变量赋值这个标题估计很多人会不屑一顾,变量赋值?excuse me?我们学开发
千家信息网最后更新 2025年11月07日PHP的变量赋值是怎么设置的

这篇文章给大家介绍PHP的变量赋值是怎么设置的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

这个标题估计很多人会不屑一顾,变量赋值?excuse me?我们学开发的第一课就会了好不好。但是,就是这样基础的东西,反而会让很多人蒙圈,比如,值和引用的关系。今天,我们就来具体讲讲。

首先,定义变量和赋值这个不用多说了吧

$a = 1;$b = '2';$c = [4, 5, 6];$d = new stdClass();

四个变量,分别定义了整型、字符串、数组的对象。这也是我们天天要打交道的四种类型。

然后,变量给变量赋值。

$a1 = $a;$b1 = $b;$c1 = $c;$d1 = $d;

请注意,前三个的赋值都是正常的赋值,也就是对具体内容的拷贝。当我们修改$a1的时候$a不会有变化。$a1是新开的内存空间保存了我们的值。也就是说,他们的值是一样的,但内存地址不一样。是两个没啥关系的长得很像的人而已。

但是$d1和$d就不是了,这两货不仅值是一样的,内存地址也是一样的。这种情况就是我们所说的引用赋值。当$d1发生变化时,$d2也会产生变化。

可以这么说:引用赋值就是为原变量建立了一个Windows下的快捷方式或者Linux中的软链接。

用具体的例子来说明,首先是普通值的赋值:

// 普通赋值$v = '1';$c = $v;$c = '2';echo $v, PHP_EOL; // '1'// 数组也是普通赋值$arr1 = [1,2,3];$arr2 = $arr1;$arr2[1] = 5;print_r($arr1); // [1, 2, 3]

$c不会对$v的值产生影响。$arr2修改了下标1,也就是第二个数字为5,当然也不会对$arr1产生影响。

那么对象形式的引用赋值呢?

// 对象都是引用赋值class A {    public $name = '我是A';}$a = new A();$b = $a;echo $a->name, PHP_EOL; // '我是A'echo $b->name, PHP_EOL; // '我是A'$b->name = '我是B';echo $a->name, PHP_EOL; // '我是B'

果然不出所料,$b修改了name属性的内容后,$a里面的name也变成了$b所修改的内容。

在这种情况下,如果对象想要不是引用传递的,一是使用__clone(),也就是原型模式来进行自己的拷贝。二是从外面重新new一个呗。

// 使用克隆解决引用传递问题class Child{    public $name = '我是A1的下级';}class A1 {    public $name = '我是A';    public $child;    function __construct(){        $this->child = new Child();    }    function __clone(){        $this->name = $this->name;        // new 或者用Child的克隆都可以        // $this->child = new Child();        $this->child = clone $this->child;    }}$a1 = new A1();echo $a1->name, PHP_EOL; // 输出a1原始的内容echo $a1->child->name, PHP_EOL;$b1 = $a1;echo $b1->name, PHP_EOL; // b1现在也是a1的内容echo $b1->child->name, PHP_EOL;$b1->name = '我是B1'; // b1修改内容$b1->child->name = '我是B1的下级';echo $a1->name, PHP_EOL; // a1变成b1的内容了echo $a1->child->name, PHP_EOL;// 使用__clone$b2 = clone $b1; // b2克隆b1$b2->name = '我是B2'; // b2修改内容$b2->child->name = '我是B2的下级';echo $b1->name, PHP_EOL; // b1不会变成b2修改的内容echo $b1->child->name, PHP_EOL;echo $b2->name, PHP_EOL; // b2修改的内容没问题,b1、b2不是一个货了echo $b2->child->name, PHP_EOL;

对象的引用这一块确实会容易让人蒙圈。特别是更加复杂的对象,内部的属性还有各种引用其他对象的时候。这种情况下一定要仔细确认引用赋值会不会带来问题,如果有问题,就使用新对象或者克隆技术进行引用问题的处理。

最后,轻松一下,引用变量的赋值就和我们给方法传引用参数一样的,使用一个&符号就可以啦!

// 引用赋值$b = &$v;$b = '3';echo $v, PHP_EOL;

今天我们更深入的学习和了解了一下PHP中的赋值问题,特别是普通赋值和引用赋值的问题。下回看代码和框架的时候可以注意注意别人是怎么灵活使用这两种赋值的哈,自己也能试试能不能运用这两种方式改造下自己曾经写过的BUG哦!

测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/201910/source/PHP%E7%9A%84%E5%8F%98%E9%87%8F%E8%B5%8B%E5%80%BC.php参考文档:https://www.php.net/manual/zh/language.variables.basics.php

关于PHP的变量赋值是怎么设置的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

内容 变量 对象 问题 普通 也就是 下级 内存 就是 情况 时候 变化 代码 地址 属性 拷贝 数组 方式 更多 参考 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 延边创业软件开发有限公司地址 腾讯为什么在天津建数据库 华为云重置服务器密码无效 国家对网络安全共同守护的规定 python调用数据库数据 网络安全融合一二三产业 牛国影响力人物数据库 软件开发拼音怎写 如何查看服务器cpu 多个应用共用一台服务器 java跨数据库框架选型 永济网络技术团队 表格如何转换数据库 默纳克服务器插上显示F 纵腾网络技术公司 软件开发与技术是关于什么 浙江益童天下网络技术有限公司 河北省检察院网络安全竞赛 联通交话费未通过网络安全 不熟悉物联网网络安全 物流系统数据库结构 网络安全业务用房可研 华为云重置服务器密码无效 福建省计算机网络技术学考真题 等因素对网络安全事件分级 数据库缓存用什么 网络工程师能做网络安全方面吗 客户端直连数据库是否安全 当兵的有做软件开发的吗 怎么弄一个图片的服务器
0