Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Conocer el fichero desde donde se llamo una funcion de una clase.

Estas en el tema de Conocer el fichero desde donde se llamo una funcion de una clase. en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola compañeros, me asalta una duda en cuanto a poo, tengo un sistema con varias clases (bd, ftp, etc...) El caso, es que quiero saber, ...
  #1 (permalink)  
Antiguo 10/01/2010, 11:10
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Conocer el fichero desde donde se llamo una funcion de una clase.

Hola compañeros, me asalta una duda en cuanto a poo, tengo un sistema con varias clases (bd, ftp, etc...) El caso, es que quiero saber, si existe alguna forma de conocer desde donde fue llamada una función de una clase, desde esa misma función, claro.

Explico lo que quiero hacer:
La clase de control de la base de datos que he creado (la he implementado yo, no es una pre-fabricada :p) tengo una variable que me va guardando las consultas realizadas, la cadena, no los resultados, una especie de log, el caso, es que, para optimizarla un poco, quiero guardar también el tiempo de ejecución (fácil) y el fichero desde donde fue llamada esa función, y si puede ser la línea, sería estupendo.

Supongo que me he explicado bien, sino, aclaro el tema un poco más.

Saludos!
  #2 (permalink)  
Antiguo 11/01/2010, 07:39
 
Fecha de Ingreso: noviembre-2007
Ubicación: Lanus, Buenos Aires
Mensajes: 178
Antigüedad: 16 años, 5 meses
Puntos: 14
Respuesta: Conocer el fichero desde donde se llamo una funcion de una clase.

puedes crear una exception, y alli obtienes todos esos datos y algunos mas

Código PHP:
$exception = new Exception;
$trace $exception->getTrace();

$line $trace[1]['line'];
$file $trace[1]['file']; 
  #3 (permalink)  
Antiguo 11/01/2010, 09:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Conocer el fichero desde donde se llamo una funcion de una clase.

También tienes la constante __FILE__ o en su caso puedes usar el ReflectionAPI
  #4 (permalink)  
Antiguo 12/01/2010, 13:27
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Conocer el fichero desde donde se llamo una funcion de una clase.

Solo os he leido, no he podido probarlo aun, pero __FILE__ no me devuelve el docuemnto actual? es decir, donde yo ponga echo __FILE__ me imprimira el nombre de ese fichero, y no el de la funcion que llamo a esa clase, no se si me explico


Ya digo, que debo probarlo, pero, igual me entendieron mal, por eso, intento aclarar.

Tengo una clase ejemplo:
Código PHP:
<?php
/*
* @file: miclase.php
*/
Class MiClase{

  function 
miFuncion(){
    echo 
'Fichero desde donde me han llamado: '.alguna_funcion_desconocida_por_mi();
    return 
true;
  }
}
?>
por otro lado, tengo un fichero, normal y corriente, tal cual:
Código PHP:
<?php
/*
*  @file: ficherito.php
*/

require_once('miclase.php');
$mc = new MiClase();
$mf $mc->miFuncion(); // Aqui, deberia imprimirme 'Fichero desde donde me han llamado: ficherito.php' y asignar $mf a true
?>
Espero lo entiendan asi lo que pretendo.
  #5 (permalink)  
Antiguo 12/01/2010, 16:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Conocer el fichero desde donde se llamo una funcion de una clase.

En ese caso usa el ReflectionAPI para eso esta.

Saludos.
  #6 (permalink)  
Antiguo 17/01/2010, 11:49
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Conocer el fichero desde donde se llamo una funcion de una clase.

No doy con la tecla.


Os cuento, he estado mirando esto como me indicó GatorV, pero dado la excasísima documentación disponible, no consigo mi objetivo.

He hecho esto:
1.- En la clase donde quiero que me diga el fichero desde donde se llama a un método de esa clase pongo esto:
Código PHP:
$this->reflector = new ReflectionClass('DB_mysql'); // DB_mysql es el nombre de la clase donde pongo esta linea 
2.- En el metodo donde quiero guardar el nombre del fichero que llamó a ese método, pongo esto:
Código PHP:
$this->reflector->getFileName(); 
3.- Consigo un nombre de fichero, pero es el nombre del fichero que contiene la clase donde puse las dos lineas superiores.

No se por donde mas seguir, busco información y no consigo mucha y la que consigo, no parece cumplir con mis expectativas, quiero decir, que no acabo de estar seguro de si lo que quiero conseguir se puede.

Alguna idea?
  #7 (permalink)  
Antiguo 19/01/2010, 10:22
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Conocer el fichero desde donde se llamo una funcion de una clase.

Es más fácil si haces algo así:
Código PHP:
Ver original
  1. require_once('miclase.php');
  2. $mc = new MiClase();
  3. ReflectionObject::export($mc);

Saludos.
  #8 (permalink)  
Antiguo 21/01/2010, 08:21
 
Fecha de Ingreso: enero-2010
Mensajes: 36
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Conocer el fichero desde donde se llamo una funcion de una clase.

DooBie, lo que podes hacer es utilizar la funcion debug_backtrace de php.
Fijate que acá tenés un ejemplo de cómo se usa:
http://www.w3schools.com/PHP/func_error_debug_backtrace.asp

Etiquetas: clase, conocer, fichero, funcion
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 14:19.