Php 对字符串文字的所有引用都引用同一实例吗?

Php 对字符串文字的所有引用都引用同一实例吗?,php,string,Php,String,我的一位同事发了一篇帖子,上面写着这样的话: 在PHP中,如果有两个变量引用相同的值,则它们是相同的实例 $a="Mary"; $b="Mary"; $c="lamb" 他暗示$a和$b引用相同的实例(内存空间)。我很难相信这一点。我知道这在java中是正确的,但我不认为php是如此,因为在php中字符串实际上并不是原则上不可变的,只有一个实例是没有意义的 此外,他说,如果我们取消设置($a),它只会删除$a的引用,而不是实际值。 这当然是真的,但证明不了什么 我还尝试了以下代码并打印了$a和

我的一位同事发了一篇帖子,上面写着这样的话:

在PHP中,如果有两个变量引用相同的值,则它们是相同的实例

$a="Mary";
$b="Mary";
$c="lamb"
他暗示$a和$b引用相同的实例(内存空间)。我很难相信这一点。我知道这在java中是正确的,但我不认为php是如此,因为在php中字符串实际上并不是原则上不可变的,只有一个实例是没有意义的

此外,他说,如果我们取消设置($a),它只会删除$a的引用,而不是实际值。 这当然是真的,但证明不了什么

我还尝试了以下代码并打印了$a和$b。如果他们共享同一个实例,那么$b的值也会改变

$a[2]=3;
echo "<br/>\$a: $a<br/>"; //He3lo
echo "<br/>\$b: $b<br/>";//Hello
$a[2]=3;
回声“
\$a:$a
”//He3lo 回声“
\$b:$b
”//你好

我很想检查变量的内存空间,但我认为php不允许这样做。有人能澄清一下这是不是真的吗

你指的是一个叫做。它似乎是从5.4版开始在Zend引擎中实现的:“我们的实现使编译时已知的字符串成为interned。”

简单测试:创建一个长字符串文本并测量内存消耗。然后对两个相同的长字符串文本执行相同的操作。即使PHP在内部优化了内存存储,它也不会像在用户代码中那样运行。那是最好的办法。答案是否定的,因为PHP使用的是写时拷贝内存管理方法。我还尝试了以下代码,并打印了
$a
$b
。如果它们共享同一个实例,
$b
的值也会发生变化。不,因为PHP是写时复制的。如果您尝试
$a=“Mary”$b=一美元即使这次它们共享同一个实例,您也会得到相同的结果。您也可以使用
debug\u zval\u dump
功能!