6

我的一个同事发了一个帖子,上面是这样说的:

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

$a="Mary";
$b="Mary";
$c="lamb"

他暗示 $a 和 $b 指的是同一个实例(内存空间)。我很难相信这一点。我知道这在 java 中是正确的,但我不认为它对于 php,因为在 php 中,字符串在原则上实际上并不是不可变的,拥有一个实例是没有意义的

此外,他说,如果我们这样做unset($a)只会删除 $a 的引用而不是实际值。这当然是对的,但什么也证明不了

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

$a[2]=3;
echo "<br/>\$a: $a<br/>"; //He3lo
echo "<br/>\$b: $b<br/>";//Hello

我很想检查变量的内存空间,但我认为 php 不允许这样做。有人可以澄清这是否属实

4

1 回答 1

2

You are referring to a concept called String interning. It seems that it is implemented in the Zend Engine since Version 5.4: "Our implementation makes the strings which are known at compile-time interned." Source.

于 2013-09-10T09:01:38.680 回答