Foros del Web » Programando para Internet » PHP »

Conocer la función que llama a otra

Estas en el tema de Conocer la función que llama a otra en el foro de PHP en Foros del Web. Para saber qué función a una en concreto uso debug_backtrace(); Ejemplo: Código PHP: function  a () {return  c ();} function  b () {return  c ();} ...
  #1 (permalink)  
Antiguo 13/05/2011, 02:40
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 3 meses
Puntos: 32
Conocer la función que llama a otra

Para saber qué función a una en concreto uso debug_backtrace();

Ejemplo:

Código PHP:
function a()
{return 
c();}


function 
b()
{return 
c();}

function 
c()
{
   
$array_backtrace=debug_backtrace();
   return 
"La función que la ha llamado es ".$array_backtrace[1]['function']."<br>"
}

echo 
a();
echo 
b(); 
Es correcta esta forma o hay otra mejor?
  #2 (permalink)  
Antiguo 13/05/2011, 02:52
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Conocer la función que llama a otra

La intención de esa función es para hacer "debug" ¿qué quieres hacer exactamente? Podrías hasta ver todas las funciones y aún más cosas con esa función.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 13/05/2011, 02:53
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: Conocer la función que llama a otra

Cita:
Iniciado por abimaelrc Ver Mensaje
La intención de esa función es para hacer "debug" ¿qué quieres hacer exactamente? Podrías hasta ver todas las funciones y aún más cosas con esa función.
Lo que quiero es saber qué función ha llamado una en concreto para que se comporte de cierta manera o no. Algo que evite que tenga que pasar parámetros que son un rollo....
  #4 (permalink)  
Antiguo 13/05/2011, 03:18
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Conocer la función que llama a otra

Pero es que si llamas una función en ella puedes indicar lo que quieres hacer exactamente. Es decir en tu ejemplo
Código PHP:
Ver original
  1. <?php
  2. function a(){
  3.     return 'foo';
  4. }
  5. function b(){
  6.     return 'bar';
  7. }
  8. echo $a();
  9. echo $b();
Cada una llamo lo que deseas. Si quieres usar esa función, no puedes especificar el número a tienes que verificar todas llaves, ya que puedes tener varias adentro, es decir
Código PHP:
Ver original
  1. <?php
  2. function bt()
  3. {
  4.     $d = debug_backtrace();
  5.     array_walk($d, function($a, $b){
  6.         echo '<b>' . basename($a['file']) . '</b>'
  7.             . ' <font color="red">' . $a['line'] . '</font>'
  8.             . ' <font color="green">' . $a['function'] . '()</font>'
  9.             . ' --' . dirname($a['file']) . '/'
  10.             . '<br />';
  11.     });
  12. }
  13.  
  14. function foo(){
  15.     bar();
  16.     baz();
  17.     candy();
  18.     return bt();
  19. }
  20.  
  21. function bar(){
  22.     return bt();
  23. }
  24. function baz(){
  25.     return bt();
  26. }
  27. function candy(){
  28.     return bt();
  29. }
  30. foo();
Solo es cuestión de recorrer el contenido, el ejemplo que usé es con array_walk y funciones anonimas.

PD: Eso funcionará solo en versiones de PHP >= 5.3.x
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 13/05/2011, 03:34
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 3 meses
Puntos: 32
Respuesta: Conocer la función que llama a otra

Vale ya te endiendo....

Lo que hago yo es recoger datos de una API y desde la función que ha recogido lo datos se llama a una que los formatea. Como ese formateo difiere muy poquito entre los datos recibidos de las diferentes funciones he creado una sólo función que los formatea.

La cuestión es saber qué función la ha invocado para poder devolver los datos correctamente.

La función precedente siempre es una de recogida de datos. Por lo que creo yo que el índice [1] es la función precedente, no?
  #6 (permalink)  
Antiguo 13/05/2011, 05:26
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Conocer la función que llama a otra

Bueno depende, si haces lo que haces sí, pero si haces algo así
Código PHP:
Ver original
  1. <?php
  2. function a()
  3. {
  4.     b();
  5.     return c();
  6. }
  7.  
  8. function b()
  9. {
  10.     return c();
  11. }
  12.  
  13. function c()
  14. {
  15. }
  16.  
  17. a();
  18. b();
Imprime
Código PHP:
Ver original
  1. (
  2.     [0] => Array
  3.         (
  4.             [file] => C:\xampp\htdocs\b.php
  5.             [line] => 10
  6.             [function] => c
  7.             [args] => Array
  8.                 (
  9.                 )
  10.  
  11.         )
  12.  
  13.     [1] => Array
  14.         (
  15.             [file] => C:\xampp\htdocs\b.php
  16.             [line] => 4
  17.             [function] => b
  18.             [args] => Array
  19.                 (
  20.                 )
  21.  
  22.         )
  23.  
  24.     [2] => Array
  25.         (
  26.             [file] => C:\xampp\htdocs\b.php
  27.             [line] => 18
  28.             [function] => a
  29.             [args] => Array
  30.                 (
  31.                 )
  32.  
  33.         )
  34.  
  35. )
  36. (
  37.     [0] => Array
  38.         (
  39.             [file] => C:\xampp\htdocs\b.php
  40.             [line] => 5
  41.             [function] => c
  42.             [args] => Array
  43.                 (
  44.                 )
  45.  
  46.         )
  47.  
  48.     [1] => Array
  49.         (
  50.             [file] => C:\xampp\htdocs\b.php
  51.             [line] => 18
  52.             [function] => a
  53.             [args] => Array
  54.                 (
  55.                 )
  56.  
  57.         )
  58.  
  59. )
  60. (
  61.     [0] => Array
  62.         (
  63.             [file] => C:\xampp\htdocs\b.php
  64.             [line] => 10
  65.             [function] => c
  66.             [args] => Array
  67.                 (
  68.                 )
  69.  
  70.         )
  71.  
  72.     [1] => Array
  73.         (
  74.             [file] => C:\xampp\htdocs\b.php
  75.             [line] => 19
  76.             [function] => b
  77.             [args] => Array
  78.                 (
  79.                 )
  80.  
  81.         )
  82.  
  83. )
y como vez el primer array indica que hay tres funciones. Eso es dependiendo como lo quieras usar.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: conocer, llama
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:54.