Foros del Web » Programando para Internet » PHP »

PHP OO ¿Es posible saber el archivo en que se instanció la clase padre?

Estas en el tema de ¿Es posible saber el archivo en que se instanció la clase padre? en el foro de PHP en Foros del Web. Eso, es posible? Ejemplo: Directorios: - includes --directorio1 --directorio2 ----directorio2_1 --directorio3 En includes/directorio1/Foo.php : @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original abstract class Foo { public ...
  #1 (permalink)  
Antiguo 03/02/2011, 18:15
 
Fecha de Ingreso: diciembre-2009
Ubicación: dirname(__FILE__)
Mensajes: 149
Antigüedad: 14 años, 4 meses
Puntos: 11
¿Es posible saber el archivo en que se instanció la clase padre?

Eso, es posible?

Ejemplo:

Directorios:
- includes
--directorio1
--directorio2
----directorio2_1
--directorio3

En includes/directorio1/Foo.php :
Código PHP:
Ver original
  1. abstract class Foo {
  2. public function Foo() {
  3. echo 'Aquí, ¿Cómo saber la ruta de la clase padre?';
  4. }
  5. }

Y en includes/directorio2/directorio2_1/Bar.php :
Código PHP:
Ver original
  1. final class Bar extends Foo {
  2. public function Bar() {
  3. }
  4. }

Si instancio en includes/directorio3:
new Bar()
Me imprimía: Aquí, ¿Cómo saber la ruta de la clase padre?
¿Cómo lo hago para que imprima includes/directorio2/directorio2_1/Bar.php? ?

Es eso posible?
__________________
Estreno blog ~ DesarrolladorWeb.cl :)
  #2 (permalink)  
Antiguo 03/02/2011, 18:27
 
Fecha de Ingreso: diciembre-2010
Ubicación: Rosario, Santa Fe
Mensajes: 326
Antigüedad: 13 años, 4 meses
Puntos: 13
Respuesta: ¿Es posible saber el archivo en que se instanció la clase padre?

Que tal si ponemos algo así:

En includes/directorio1/Foo.php :
abstract class Foo {

public function Foo() {
echo 'Aquí, ¿Cómo saber la ruta de la clase padre?';
}
}


Y en includes/directorio2/directorio2_1/Bar.php :


final class Bar extends Foo {
public function Bar() {
echo __FILE__
}
}
  #3 (permalink)  
Antiguo 03/02/2011, 19:14
 
Fecha de Ingreso: diciembre-2009
Ubicación: dirname(__FILE__)
Mensajes: 149
Antigüedad: 14 años, 4 meses
Puntos: 11
Respuesta: ¿Es posible saber el archivo en que se instanció la clase padre?

:O
Gracias, pensé hacerlo así pero supuse que __FILE__ sería el archivo de Bar.php, y no el de Foo.php
Haré una prueba y comento.
__________________
Estreno blog ~ DesarrolladorWeb.cl :)
  #4 (permalink)  
Antiguo 03/02/2011, 19:22
 
Fecha de Ingreso: diciembre-2009
Ubicación: dirname(__FILE__)
Mensajes: 149
Antigüedad: 14 años, 4 meses
Puntos: 11
Respuesta: ¿Es posible saber el archivo en que se instanció la clase padre?

No, __FILE__ es la ruta del archivo actual, en éste sentido arroja "includes/directorio2/directorio2_1/Bar.php" en vez de "includes/directorio1/Foo.php".

Gracias de todos modos :)
__________________
Estreno blog ~ DesarrolladorWeb.cl :)
  #5 (permalink)  
Antiguo 03/02/2011, 21:17
 
Fecha de Ingreso: octubre-2009
Mensajes: 245
Antigüedad: 14 años, 6 meses
Puntos: 17
Respuesta: ¿Es posible saber el archivo en que se instanció la clase padre?

Seria mejor si explicas que es lo que quieres hacer exactamente, es decir para que quieres obtener el archivo donde esta definida la clase.
__________________
Saludos.
  #6 (permalink)  
Antiguo 03/02/2011, 22:41
 
Fecha de Ingreso: diciembre-2009
Ubicación: dirname(__FILE__)
Mensajes: 149
Antigüedad: 14 años, 4 meses
Puntos: 11
Respuesta: ¿Es posible saber el archivo en que se instanció la clase padre?

Era para hacer el controlador abstracto para un sistema MVC de módulos. Es decir:

-modulos/
--Formulario/
---admin/
---publico/
----modelos/
----vistas/
-----vista1.php
-----vista2.php
----Formulario.php <-- extiende de Controlador.php
--Catalogo/
etc.

Controlador.php está en otro directorio "nucleo", entonces necesitaba que esa clase supiera la ruta en donde fue instanceada, para de esa forma poder hacer métodos tipo "listarVistas()", etc.

Ahora lo tengo así (para saber la ruta de las vistas):

Código PHP:
Ver original
  1. $this->vista = CARPETA_BASE . S . 'modulos' . S . get_class($this);
  2. $this->vista .= S . 'publico' . S . 'vistas' . S;

El problema de esa solución es que 'publico' puede variar a 'admin', así que lo ideal es que en vez de ponerlo hardcode se detectara automáticamente.

En todo caso ya encontré otra solución, poner una banderita al comienzo del script con true si es publico y false si es admin.

Al parecer no se puede saber el fichero en donde se instancia una clase, pero bue.
Saludos
__________________
Estreno blog ~ DesarrolladorWeb.cl :)
  #7 (permalink)  
Antiguo 03/02/2011, 23:50
 
Fecha de Ingreso: octubre-2009
Mensajes: 245
Antigüedad: 14 años, 6 meses
Puntos: 17
Respuesta: ¿Es posible saber el archivo en que se instanció la clase padre?

Vaya creo que te estas complicando, pero bueno puedes usar reflection para obtener la información de la clase te dejo un ejemplo
Código PHP:
Ver original
  1. class Person {
  2.     private $name;    
  3.     private $age;    
  4.     private $id;    
  5.  
  6.     function __construct( $name, $age ) {
  7.         $this->name = $name;
  8.         $this->age = $age;
  9.     }
  10.  
  11.     function setId( $id ) {
  12.         $this->id = $id;
  13.     }
  14.    
  15.     function getId(){
  16.         echo "get id method";    
  17.     }
  18.    
  19.     function __clone() {
  20.         $this->id = 0;
  21.     }
  22. }
  23.  
  24. class ReflectionUtil {
  25.   static function getClassSource( ReflectionClass $class ) {
  26.     $path = $class->getFileName();
  27.     $lines = @file( $path );
  28.     $from = $class->getStartLine();
  29.     $to   = $class->getEndLine();
  30.     $len  = $to-$from+1;
  31.     return implode( array_slice( $lines, $from-1, $len ));
  32.   }
  33. }
  34.  
  35. print ReflectionUtil::getClassSource(
  36.   new ReflectionClass( 'Person' ) );

También revisa estas secciones de la documentación http://www.php.net/manual/en/language.oop5.autoload.php
http://www.php.net/manual/en/language.namespaces.php
__________________
Saludos.
  #8 (permalink)  
Antiguo 04/02/2011, 00:10
 
Fecha de Ingreso: diciembre-2009
Ubicación: dirname(__FILE__)
Mensajes: 149
Antigüedad: 14 años, 4 meses
Puntos: 11
Respuesta: ¿Es posible saber el archivo en que se instanció la clase padre?

Interesante, seguro que me sirve para más a delante y quizá a otros también.
Gracias.
__________________
Estreno blog ~ DesarrolladorWeb.cl :)

Etiquetas: clase, padre, posible
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 23:29.