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

Problema con herencia

Estas en el tema de Problema con herencia en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola a todos, Estoy creando una serie de clases bastante sencillas pero cuando aplico herencia no consigo que me funcionen los metodos de la clase ...
  #1 (permalink)  
Antiguo 14/05/2012, 10:34
 
Fecha de Ingreso: junio-2008
Mensajes: 175
Antigüedad: 15 años, 9 meses
Puntos: 11
Problema con herencia

Hola a todos,

Estoy creando una serie de clases bastante sencillas pero cuando aplico herencia no consigo que me funcionen los metodos de la clase padre.

La clase padre es 'Categoria' mientras que la clase hija es 'Articulo', simplemente defino un metodo llamado showCategories() en la clase padre para mostrar una lista de categorias y en la clase hijo llamo a este metodo a la hora de mostrar un formulario pero por algun motivo cuando llega a la parte en que se llama al metodo, se rompe la ejecucion y no me muestra nada mas:

Categoria.class.php
Código PHP:
<?php
class Categoria{
        
        private 
$category_items = array();

        public function 
showCategories($id NULL){
            if(!isset(
$id)){
                
$sql sprintf("SELECT * FROM categories ORDER BY id_category DESC");
            }
            else{
                
$sql sprintf("SELECT * FROM categories WHERE id_category = '%s' ORDER BY id_category DESC"mysql_real_escape_string($id));
            }
            
$result mysql_query($sql);
            while(
$fila mysql_fetch_assoc($result)){
                
$this->category_items[] = $fila;
            }
            return 
$this->category_items;
        }
?>
Articulo.class.php
Código PHP:
<?php
require_once('categoria.class.php');
    
    class 
Articulo extends Categoria{
        
        private 
$articulo = array();

        public static function 
showInsertArticuloForm($id NULL$name NULL$code NULL$active NULL$desc NULL){
            
            echo 
"
                <form method='post' action='insert-article.php' name='fInsertArticle'>"
;
                if(isset(
$id))
                    echo 
"<input type='hidden' name='id_art' value='".$id."' />";
                    echo 
"<p>Name: <input type='text' name='art_name' size='35' ";
                    if(isset(
$name)) echo "value='".$name."'";
                    echo 
"/></p>
                    <p>Code: <input type='text' name='art_code' size='36' "
;
                    if(isset(
$code)) echo "value='".$code."'";
                    echo 
"/></p>
                    <p>Active?: <input type='checkbox' name='art_active' "
;
                    if(isset(
$active)) echo "checked='checked'";
                    echo 
"/></p>
                    <p>Category for this item:
                        <select name='art_cat'>"
;
                    
                    
// Heredado de Categoria, aqui es donde falla
                    
$cat_items parent::showCategories();
                    for(
$i 0$i count($cat_items); $i++){
                        echo 
"<option value='".$cat_items[$i]['id_category']."'>".$cat_items[$i]['name_category']."</option>";
                    }
                    
                    echo     
"</select>
                    </p>
                    <p>Description: </p>
                    <p><textarea name='art_desc' id='art_desc' rows='30' cols='60'>"
;
                    if(isset(
$desc)) echo stripslashes($desc);
                    echo 
"</textarea></p>
                    <input type='button' value='Insert New Item' onClick='checkInsertArticleForm();' class='submit' />
                </form>
            "
;
        }
?>
Donde he puesto el comentario se rompe la ejecucion y no sigue mostrando datos. Comentar tambien que he probado con $this->showCategories() tambien pero no funciona de igual manera (aunque el Komodo me reconoce las funciones heredadas de la clase padre). El metodo showCategories() por si solo funciona perfectamente ya que lo uso en otra pagina y me muestra las categorias sin problemas por lo que no se me ocurre que puede ser

Un saludo y gracias de antemano!
  #2 (permalink)  
Antiguo 14/05/2012, 10:39
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Problema con herencia

Pues el problema que puedo ver es que en tu clase articulo, la función es estática, tendrías que quitar eso para que tengas que instanciar el objeto, y luego no es necesario usar parent::showCategories(), con que hagas $this->showCategories() basta, ya que al estar heredando es parte de la misma clase.

Saludos.
  #3 (permalink)  
Antiguo 14/05/2012, 10:53
 
Fecha de Ingreso: junio-2008
Mensajes: 175
Antigüedad: 15 años, 9 meses
Puntos: 11
Respuesta: Problema con herencia

Cita:
Iniciado por GatorV Ver Mensaje
Pues el problema que puedo ver es que en tu clase articulo, la función es estática, tendrías que quitar eso para que tengas que instanciar el objeto, y luego no es necesario usar parent::showCategories(), con que hagas $this->showCategories() basta, ya que al estar heredando es parte de la misma clase.

Saludos.
Hola GatorV, si, justamente era esto.

Ahora he encontrado el error que me arroja el php_error.log y buscando un poco he dado con un hilo en el que se habla del tema.

Para la proxima vez ya se donde ir buscar antes de preguntar :D

Muchas gracias!

Etiquetas: clase, class, herencia, php
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 06:40.