Foros del Web » Programando para Internet » PHP »

Problemas de clases heredadas

Estas en el tema de Problemas de clases heredadas en el foro de PHP en Foros del Web. Hola buenas tengo una duda sobre clases Tengo una clase heredada con este nombre Código PHP: class  IndexController  extends  ControllerBase { // Config - Cerrar sesión del usuario     // *****************************      public function  ...
  #1 (permalink)  
Antiguo 28/09/2010, 01:52
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 22 años
Puntos: 4
Problemas de clases heredadas

Hola buenas tengo una duda sobre clases

Tengo una clase heredada con este nombre

Código PHP:
class IndexController extends ControllerBase
{
// Config - Cerrar sesión del usuario
    // *****************************
    
public function Close()
    {    
        
# Ventana emergente de cerrando sesión
        
if ($_GET[close_si]) {
            
            
$data['title']  = $this->Title." - ".$this->translate->valor("Cerrando sesión");
            
$data['Avisos']= $this->view->folder("CloseSesion.php",$data);
            
$this->view->view("ViewAvisos.php"$data);
            
            
$_SESSION[Intranet_Id] = "";
            
$_SESSION[Intranet_Email] = "";
            
$_SESSION[Intranet_Pass] = "";
            echo
"<META HTTP-EQUIV=\"Refresh\" CONTENT=\"3;URL='".DOMINIOx."/intranet/"."'\">";
            exit;
        }
        
        
# Ventana emergente de confirmación Cierre sessión
        
elseif ($_GET[Close] == "yes")
        {
            
            
# Plantilla HideLightbox
            
$DATA $this->helpers->view("hideLightbox_CloseIntranet.php");
            
$Avisos Avisos::Confirmation($DATA,"?c=&amp;a=Close&amp;close_si=yes");
            
            return 
$Avisos;
            
        }

    }

Y desde otra clase hago llamar a una funcion así
Código PHP:
IndexController::Close(); 
Pero si ahora quitase la funcion Close() desde IndexController y la pusiese en otra clase

Código PHP:
class Cargar extends IndexController
{
// Config - Cerrar sesión del usuario
    // *****************************
    
public function Close()
    {    
        
# Ventana emergente de cerrando sesión
        
if ($_GET[close_si]) {
            
            
$data['title']  = $this->Title." - ".$this->translate->valor("Cerrando sesión");
            
$data['Avisos']= $this->view->folder("CloseSesion.php",$data);
            
$this->view->view("ViewAvisos.php"$data);
            
            
$_SESSION[Intranet_Id] = "";
            
$_SESSION[Intranet_Email] = "";
            
$_SESSION[Intranet_Pass] = "";
            echo
"<META HTTP-EQUIV=\"Refresh\" CONTENT=\"3;URL='".DOMINIOx."/intranet/"."'\">";
            exit;
        }
        
        
# Ventana emergente de confirmación Cierre sessión
        
elseif ($_GET[Close] == "yes")
        {
            
            
# Plantilla HideLightbox
            
$DATA $this->helpers->view("hideLightbox_CloseIntranet.php");
            
$Avisos Avisos::Confirmation($DATA,"?c=&amp;a=Close&amp;close_si=yes");
            
            return 
$Avisos;
            
        }

    }

Porque no puedo hacerla llamar como si fuera IndexController:: si es una extendida y heredada de indexController????

Gracias.
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #2 (permalink)  
Antiguo 28/09/2010, 08:23
 
Fecha de Ingreso: febrero-2009
Mensajes: 218
Antigüedad: 15 años, 9 meses
Puntos: 9
Respuesta: Problemas de clases heredadas

Cita:
Pero si ahora quitase la funcion Close() desde IndexController y la pusiese en otra clase
Si sacas la funcion close de la clase IndexController, las clases hijas de IndexController ya no podran heredarlas, tene en cuenta que la herencia va hacia abajo (se transmite de padres a hijos) no hacia arriba (de hijos a padres).
  #3 (permalink)  
Antiguo 28/09/2010, 22:31
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 22 años
Puntos: 4
Respuesta: Problemas de clases heredadas

Muchas gracias. Asi si quisiera ponerlo en la clase Cargar tendré que hacerla llamar desde Cargar::Close().

Saludos.
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #4 (permalink)  
Antiguo 29/09/2010, 10:10
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Problemas de clases heredadas

Por otro lado no es recomendable mandar llamar funciones no-estaticas de forma estatica es un error conceptual y te genera un E_NOTICE, y si esta E_STRICT te generará un E_FATALERROR.

Saludos.
  #5 (permalink)  
Antiguo 29/09/2010, 14:34
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 22 años
Puntos: 4
Respuesta: Problemas de clases heredadas

Entonces como tendria que hacer la function dentro de la clase como static?
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #6 (permalink)  
Antiguo 29/09/2010, 16:06
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Problemas de clases heredadas

Si la quieres static, usa ese operador, public static function para eso.

Saludos.
  #7 (permalink)  
Antiguo 30/09/2010, 02:55
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 22 años
Puntos: 4
Respuesta: Problemas de clases heredadas

Ok, un duda un public static bueno es mas recomendable cuando se haga una llamada desde otra clase?

Código PHP:
class a{

public static function 
b(){

}


Código PHP:
class H{

function 
Ha(){

$data a::b();

}


Así su ejemplo?
Gracias.
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #8 (permalink)  
Antiguo 30/09/2010, 08:37
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Problemas de clases heredadas

Cada uno tiene su uso, y es como haz visto uno es para llamar funciones de forma estatica y la otra no.

En el caso que expones si su uso es estatico si debes de usar el operador :: para mandarla llamar, pero si su uso no es estatico entonces debes instanciar la clase y llamar al metodo que ocupes.

Saludos.
  #9 (permalink)  
Antiguo 30/09/2010, 13:41
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 22 años
Puntos: 4
Respuesta: Problemas de clases heredadas

Que significado es estatico?

Estatico significa siempre igual pero cuando llamar a una clase static o normal?

Gracias.
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #10 (permalink)  
Antiguo 30/09/2010, 14:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Problemas de clases heredadas

No, estatica es eso, que siempre se usa la misma instancia y siempre opera bajo la misma forma, por ende no es posible instanciarla y usarla con diferentes métodos, si tu todo lo programas de manera estatica, no estas programando orientado a objetos, si no orientado a funciones ya que no estas aprovechando el uso real de OOP.

Saludos.
  #11 (permalink)  
Antiguo 30/09/2010, 14:47
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 21 años, 6 meses
Puntos: 60
Respuesta: Problemas de clases heredadas

Cuando veo cosas como esto

Código PHP:
$_SESSION[Intranet_Pass] = ""
            echo
"<META HTTP-EQUIV=\"Refresh\" CONTENT=\"3;URL='".DOMINIOx."/intranet/"."'\">"


Recuerdo por que tiene tanta mala fama PHP
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador
  #12 (permalink)  
Antiguo 01/10/2010, 00:30
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 22 años
Puntos: 4
Respuesta: Problemas de clases heredadas

Esta mal este script?

Código PHP:
unset($_SESSION[Intranet_Pass]);
echo
"<META HTTP-EQUIV=\"Refresh\" CONTENT=\"3;URL='".DOMINIOx."/intranet/"."'\">"
Porque?
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #13 (permalink)  
Antiguo 01/10/2010, 06:59
atrianaster
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problemas de clases heredadas

Hola @syntex

El código no está mal, pero es una mala práctica de desarrollo.

No debes imprimir código html desde php, utiliza el método de escape.

Separa tu presentación de tu lógica de negocios. Esto lo puedes solucionar utilizando el Patrón clásico de diseño web Modelo Vista Controlador (MVC).

Aquí te dejo 2 link:

http://arleytriana.blogspot.com/2009...lasico-de.html
http://web2development.blogspot.com/...atron-mvc.html

Saludos.

Última edición por atrianaster; 01/10/2010 a las 07:02 Razón: Saludos.
  #14 (permalink)  
Antiguo 01/10/2010, 23:33
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 22 años
Puntos: 4
Respuesta: Problemas de clases heredadas

Una pregunta

Si tengo que hacer una condicion eso estaria en el controlador, no?

Código PHP:
class Cargar extends IndexController
{
// Config - Cerrar sesión del usuario
    // *****************************
    
public function Close()
    {    
        
# Ventana emergente de cerrando sesión
        
if ($_GET[close_si]) {
            
            
$data['title']  = $this->Title." - ".$this->translate->valor("Cerrando sesión");
            
$data['Avisos']= $this->view->folder("CloseSesion.php",$data);
            
$this->view->view("ViewAvisos.php"$data);
            
            
$_SESSION[Intranet_Id] = "";
            
$_SESSION[Intranet_Email] = "";
            
$_SESSION[Intranet_Pass] = "";
            echo
"<META HTTP-EQUIV=\"Refresh\" CONTENT=\"3;URL='".DOMINIOx."/intranet/"."'\">";
            exit;
        }
        
        
# Ventana emergente de confirmación Cierre sessión
        
elseif ($_GET[Close] == "yes")
        {
            
            
# Plantilla HideLightbox
            
$DATA $this->helpers->view("hideLightbox_CloseIntranet.php");
            
$Avisos Avisos::Confirmation($DATA,"?c=&amp;a=Close&amp;close_si=yes");
            
            return 
$Avisos;
            
        }

    }

O como arian una condición en MVC?

Gracias.
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #15 (permalink)  
Antiguo 01/10/2010, 23:57
atrianaster
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problemas de clases heredadas

Te recomiendo que le des una repasada a los 2 vínculos que te deje. El condicional en el MVC es igual, el MVC es solo una separación de las capas, mejor organización de tu código para mantenimientos posteriores, limpieza, y performance.

Saludos.

Etiquetas: clases
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 12:52.