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

duda cortita sobre ambito de una abstracta

Estas en el tema de duda cortita sobre ambito de una abstracta en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola. estoy creando una clase abstracta: abstract class Ejecuta { static public function run() { _iniciar(); ( lína 8) _main(); } private function _iniciar() { ...
  #1 (permalink)  
Antiguo 27/09/2009, 18:28
 
Fecha de Ingreso: noviembre-2008
Mensajes: 288
Antigüedad: 15 años, 6 meses
Puntos: 2
duda cortita sobre ambito de una abstracta

Hola.
estoy creando una clase abstracta:

abstract class Ejecuta

{
static public function run()
{
_iniciar(); ( lína 8)
_main();
}


private function _iniciar() {
....;
}
private function _main()
{
....;
}
}

pero cuando trato de utilizarla:

require_once ('ejecuta.php');
Ejecuta::run();

me da el error:
Fatal error: Call to undefined function _iniciar() en Ejecuta.php on line 8

¿Alguien sabe el por que?

gracias.
  #2 (permalink)  
Antiguo 27/09/2009, 22:12
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: duda cortita sobre ambito de una abstracta

El mensaje de error te dice que la función _iniciar no existe, el problema es que para invocarla debes ser explícito según el contexto de ejecución, es decir, si es una instancia debes hacer referencia a los atributos y métodos usando $this, de lo contrario, self.

En ningún caso puedes ejecutar un método sin decir nada.

Cambia y funcionará.

Saludos
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #3 (permalink)  
Antiguo 28/09/2009, 14:41
 
Fecha de Ingreso: noviembre-2008
Mensajes: 288
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: duda cortita sobre ambito de una abstracta

Ahhh... muchas gracias profe! usted está por todos lados!!

Le he quitado el abstract a la clase.
Solo me ha resultado si declaro a las funciones dentro de Run() como estaticas también.

class Ejecuta
{
public static function Run()
{
....
self::_iniciar();
self::_run();
}
private static function _iniciar() { ..... }
private static function _run() { ..... }
}

La pregunta es como declarar no estaticas a _iniciar y _run e invocarlas correctamente desde Run().


Con self o this, me da error.
$this->_inciar(); o self::_iniciar();

con self:
Strict Standards: Non-static method Ejecuta::_iniciar() should not be called statically

con this:
Fatal error: Using $this when not in object context
  #4 (permalink)  
Antiguo 28/09/2009, 15:00
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: duda cortita sobre ambito de una abstracta

Lo que pasa es que en ese caso tendrías que dentro crear un objeto propio y accesar a los valores, por ejemplo:
Código PHP:
Ver original
  1. class Foo {
  2.         public static function Run() {
  3.                 $obj = new self();
  4.                 $obj->_init();
  5.                 $obj->_run();
  6.         }
  7.  
  8.         public function _init() {}
  9.         public function _run() {}
  10. }

Saludos.
  #5 (permalink)  
Antiguo 28/09/2009, 16:52
 
Fecha de Ingreso: noviembre-2008
Mensajes: 288
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: duda cortita sobre ambito de una abstracta

Barbaro! gracias GatorV !!
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 00:52.