Php 为什么增加zval的参考计数不起作用?

Php 为什么增加zval的参考计数不起作用?,php,php-internals,Php,Php Internals,我正在转储一个在PHP 7.3.5版上运行的zval容器(opcache已激活,PHP已启用线程安全),代码如下: <?php $a = "new string"; $b = $a; xdebug_debug_zval( 'a' ); 在我的设置(php7.3.5)中,它输出refcount=1: a: (refcount=2, is_ref=0)='new string' a: (refcount=1, is_ref=0)string 'new string' (length=10

我正在转储一个在PHP 7.3.5版上运行的zval容器(opcache已激活,PHP已启用线程安全),代码如下:

<?php 
$a = "new string";
$b = $a;
xdebug_debug_zval( 'a' );
在我的设置(php7.3.5)中,它输出refcount=1

a: (refcount=2, is_ref=0)='new string'
a:
(refcount=1, is_ref=0)string 'new string' (length=10)
实际上,我使用PHP5.6获得了与php.net文档相同的输出。
PHP7内部发生了什么变化?为什么refcount保持为1?

正如Nikita在评论中指出的那样,字符串作为一个常量文本,是内部术语,意思类似于“字符串的单例”,因此不计算引用

与插入字符串一样,不可变数组(即在运行时内存中的形状和位置可能不会改变的数组)也不计入引用


Xdebug 3.0将使用补丁进行更新,这将允许它显示何时插入字符串或数组是不可变的。

字符串是插入的,因此不使用refcounting。