Als ich PHP zum Thema Referenzzählung getestet habe, habe ich gesehen, dass eine Variable einen Zval-Container hat. Es enthält zwei Attribute, eines ist refcount und das andere ist_ref
$array= array( 'meaning' => 'life', 'number' => 42 );
xdebug_debug_zval( 'array' );
Beim Testen des Referenzzählers des Arrays werden die Ergebnisse wie erwartet zurückgegeben
array (refcount=1, is_ref=0),
array (size=2)
'meaning' => (refcount=1, is_ref=0),string 'life' (length=4)
'number ' => (refcount=1, is_ref=0),int 42
Aber beim Testen von Probanden. Eine Frage haben?
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
Verstehen Sie nicht ganz, warum? Wird das 2 sein? Anstelle von 1. Anstelle eines PHP-Arrays. Der erwartete Refcount scheint 1
zu seinUnd im offiziellen PHP-Handbuch. Eine Erläuterung konformer Typen bezüglich der Referenzzählung.
php-Referenzanzahl
Bei zusammengesetzten Typen wie Array und Objekt ist die Sache etwas komplizierter. Im Gegensatz zu Werten vom Skalartyp speichern Variablen von Array- und Objekttypen ihre Mitglieder oder Eigenschaften in ihren eigenen Symboltabellen.
业精于勤,荒于嬉;行成于思,毁于随。