2016-02-05 3 views
1

Une partie du code abstrait:Quels sont les arguments d'état de fonction que capture debug_backtrace()?

function test($a = 5) { 
    debug_backtrace(); 
    a = 10; 
} 

Qu'est-ce qui debug_trace nous dire sur les arguments de la fonction de test?
Capture-t-il $a comme 5 ou 10?

+0

Je ne pense pas que vous sachiez ce que signifie "pseudo-code". –

+0

@MadPhysicist Ouais, merci, mon échec .. Espoir "abstrait" sera plus approprié pour ce contexte – mvlabat

Répondre

0

Si nous appelons la fonction de l'exemple de cette façon:

test(4); 

il va capturer '4'.

Et si nous l'appelons ainsi:

test(); 

il va capturer en réalité aucune donnée sur les arguments. Je suppose que l'analyseur n'initialise pas les arguments s'ils n'ont été utilisés nulle part. (L'appel de debug_backtrace ne compte pas.)

J'ai fait d'autres recherches et les choses se sont avérées un peu inattendues (personnellement pour moi) si on passait des arguments par référence ... Mais assez logique, je l'admets.

Si nous utilisons le code suivant:

<?php 
    function test2(&$a) { 
      $a = 5; 
      test($a); 
      $a = 8; 
    } 
    function test(&$a) { 
      $a = 6; 
      print_r(debug_backtrace()); 
      $a = 7; 
    } 
    $test = 1; 
    test2($test); 

Nous allons obtenir cette production:

Array (
    [0] => Array (
    [file] => /var/www/localhost/htdocs/index.php 
    [line] => 4 
    [function] => test 
    [args] => Array ([0] => 6) 
) 
    [1] => Array (
    [file] => /var/www/localhost/htdocs/index.php 
    [line] => 13 
    [function] => test2 
    [args] => Array ([0] => 6) 
) 
) 

Alors debug_backtrace() imprime toujours l'état actuel des arguments de fonction transmis par des références (lorsque debug_backtrace() a été appelé), peu importe s'ils avaient une autre valeur sur un appel de fonction parent.
Soyez prudent lors du débogage! :)

+0

Comment déboguer le débogage? –

+0

@MadPhysicist, ehm, excusez-moi? – mvlabat