Lors du test de PHP sur le comptage de références, j'ai vu qu'une variable avait un conteneur zval. Il contient deux attributs, l'un est refcount et l'autre is_ref
$array= array( 'meaning' => 'life', 'number' => 42 );
xdebug_debug_zval( 'array' );
Lors du test du nombre de références du tableau, les résultats sont renvoyés comme prévu
array (refcount=1, is_ref=0),
array (size=2)
'signification' => (refcount=1, is_ref=0),string 'life' (length=4)
'number ' => (refcount=1, is_ref=0),int 42
Mais lors des tests de sujets. Avoir une question?
class A{
private $a1;
public $a2;
}
$class1 = new A();
xdebug_debug_zval('class1');
class1:
(refcount=1, is_ref=0),
object(A)(1]
private 'a1' => (refcount=2, is_ref=0),null
public 'a2' => ; (refcount=2, is_ref=0),null
Vous ne comprenez pas très bien pourquoi ? Est-ce que ce sera le 2 ? Au lieu de 1. Au lieu de ressembler à un tableau php. Le recompte attendu semble être 1
Et dans le manuel officiel php. Une explication des types conformes concernant le comptage de références.
nombre de références php
Les choses sont un peu plus compliquées lorsqu'il s'agit de types composites comme un tableau et un objet Contrairement aux valeurs de type scalaire, les variables de type tableau et objet stockent leurs membres ou propriétés dans leurs propres tables de symboles.
业精于勤,荒于嬉;行成于思,毁于随。