2016-10-18 1 views
0

Je fonction de recherche avec la variable statique, permet de regarder le code suivant:mémoire statique dans les fonctions [PHP]

(Attention Pour le test, vous devez avoir activé xdebug dans php.ini!)

function a() 
{ 
    static $var = 10; 
    xdebug_debug_zval('var'); 
    return $var; 
} 
a(); 

Sortie suivante: var:(refcount=2, is_ref=1),int 10

Que se passe-t-il? Pourquoi est refcount=2? Où deuxième référence?

P.S Donc, si nous avons var:(refcount=2, is_ref=1),int 10. Cela signifie que nous ne pouvons pas sauvegarder la référence dans une variable statique.

Pour l'utilisateur Mark Baker

function a() 
{ 
    $var = 10; 
    xdebug_debug_zval('var'); 
    return $var; 
} 
a(); 

Sorties: var:(refcount=1, is_ref=0),int 10

Info: Appel d'une fonction ne pas utiliser l'argument variable qui aucun problème avec la sortie d'informations. Par conséquent, compte tenu des arguments utilisés par le nom de la variable écrite dans une chaîne

+0

@MarkBaker Je mis à jour mon post – MaximPro

+1

@MarkBaker C'est faux. 'debug_zval_dump()' prend une entrée par référence. 'xdebug_debug_zval()' cependant y accède directement depuis la table des symboles parents sans manipuler refcount et références. – bwoebi

+0

@bwoebi - Ah! Mon mauvais –

Répondre

1

L'accès aux variables statiques dans PHP crée une référence à un tableau interne de statique lors de l'utilisation.

Vous pouvez le vérifier en remarquant qu'il est impossible de stocker des références dans les variables statiques:

function a() { 
    static $var = 1; 
    var_dump($var); 
    $var = &$ref; 
    $var = 2; 
} 
a(); a(); 
// prints int(1) int(1) 
+0

Ha, je sais que vous ne pouvez pas stocker des références à des variables statiques, je l'ai testé. Puis-je connaître une deuxième variable statique alias? Ou puis-je voir tableau interne de statique? – MaximPro

+0

@MaximPro ['(new ReflectionFunction (" a ")) -> getStaticVariables()'] (http://php.net/reflectionfunctionabstract.getstaticvariables) vous les donnera. Vous ne savez pas ce que vous entendez par "second alias"? – bwoebi

+0

Non, je n'ai pas besoin d'un tableau de variables statiques dans une fonction! Voir le suivant: 'var: (refcount = 2, is_ref = 1)' - nous avons ici 'refcount = 2' et' is_ref = 1' cela signifie que nous avons un lien physique. La première variable de lien est 'var' et où est une deuxième variable de lien? Je veux savoir où elle est? – MaximPro