Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-01-2007
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
[clases] No puedo acceder a propiedad protegida

Estoy intentando crear una clase con una propiedad protegida. Sin embargo me hace cosas muy raras. He simplificado el código al máximo:

Código PHP:
<?php

class phpDocTextItem
{
  protected 
$Text# Contiene el texto.

  ## __construct:
  ##   Constructor.  Almacena el texto pasado.
  
function __construct ($Text)
  {
    if (!
is_string ($Text)) die ('phpDocTextItem need to get a text string');
    
$this->$Text $Text;
  }



## toString:
##   Devuelve la cadena.
  
public function toString ()
  {
    echo (
'phpDocTextItem::toString: '); print_r ($this); echo ('<br>');
    return 
$this->$Text;
  }
}



class 
phpDocItemContainer
{
  protected 
$ItemList# El contenido del contenedor.

## addItem:
##   Añade un elemento a la lista.
  
public function addItem ($Item)
  {
  
# Primero intenté así:
  # $this->$ItemList[] = $Item;

  # pero como generaba errores de compilación, lo fui cambiando hasta que dejó
  # de dar errores. Esto es lo que quedó al final.
    
if (isset ($this->$ItemList)) {
      
$this->$ItemList[count ($this->$ItemList)] = $Item;
    }
    else {
      
$ItemList[0] = $Item;
      
$this->$ItemList $ItemList;
    }
    echo (
'phpDocItemContainer::addItem -> '); print_r ($this); echo ('<br>');
  }

## toString:
##   Devuelve una cadena que es la suma de todos los elementos contenidos.
  
public function toString ()
  {
    echo (
'phpDocItemContainer::toString -> ');print_r ($this); echo ('<br>');
  
# Primero, tiene que haber contenido.
    
if (isset ($this->$ItemList)) {
    
# Empezamos desde el principio.
      
$Resultado "";
      foreach (
$this->$ItemList as $Elemento)
    
$Resultado $Elemento->toString ();
    }
  }
}

# Creamos un contenedor para ver qué tal.
  
$Contenedor = new phpDocItemContainer;
# Añadimos un elemento, por hacer el ganso.
  
$Contenedor->addItem (new phpDocTextItem ('¡Hola, Mundo!'));
  
$Contenedor->addItem (new phpDocTextItem ('¡Adios, Mundo!'));
# Resultado:
  
echo 'Resultado >>>>>>>>> ' $Contenedor->toString ();
?>
En teoría el resultado buscado es:

Código:
phpDocItemContainer::addItem -> phpDocItemContainer Object (     [ItemList:protected] =>      [Array] => Array         (             [0] => phpDocTextItem Object                 (                     [Text:protected] =>                      [¡Hola, Mundo!] => ¡Hola, Mundo!                 )          )  ) 
phpDocItemContainer::addItem -> phpDocItemContainer Object (     [ItemList:protected] =>      [Array] => Array         ( [0] => phpDocTextItem Object                 (                     [Text:protected] =>                      [¡Hola, Mundo!] => ¡Hola, Mundo!                 )          , [1] => phpDocTextItem Object                 (                     [Text:protected] =>                      [¡Adios, Mundo!] => ¡Adios, Mundo!                 )          )  ) 
phpDocItemContainer::toString -> phpDocItemContainer Object (     [ItemList:protected] =>      [Array] => Array         ( [0] => phpDocTextItem Object                 (                     [Text:protected] =>                      [¡Hola, Mundo!] => ¡Hola, Mundo!                 )          , [1] => phpDocTextItem Object                 (                     [Text:protected] =>                      [¡Adios, Mundo!] => ¡Adios, Mundo!                 )                    )  ) 
Resultado >>>>>>>>> phpDocTextItem Object                 (                     [Text:protected] =>                      [¡Hola, Mundo!] => ¡Hola, Mundo!                 )
phpDocTextItem Object                 (                     [Text:protected] =>                      [¡Adios, Mundo!] => ¡Adios, Mundo!                 ) 
¡Hola, Mundo!¡Adios, Mundo!
Sin embargo el resultado real es:

Código:
phpDocItemContainer::addItem -> phpDocItemContainer Object (     [ItemList:protected] =>      [Array] => Array         (             [0] => phpDocTextItem Object                 (                     [Text:protected] =>                      [¡Hola, Mundo!] => ¡Hola, Mundo!                 )          )  ) 
phpDocItemContainer::addItem -> phpDocItemContainer Object (     [ItemList:protected] =>      [Array] => Array         (             [0] => phpDocTextItem Object                 (                     [Text:protected] =>                      [¡Adios, Mundo!] => ¡Adios, Mundo!                 )          )  ) 
phpDocItemContainer::toString -> phpDocItemContainer Object (     [ItemList:protected] =>      [Array] => Array         (             [0] => phpDocTextItem Object                 (                     [Text:protected] =>                      [¡Adios, Mundo!] => ¡Adios, Mundo!                 )          )  ) 
Resultado >>>>>>>>>

Como ven, bastante diferente.

Yo ya no sé qué hago mal, ni por qué funciona. He consultado en http://www.php.net y según la documentación mi primer intento (que ahora está comentado) estaba bien, pero no funciona.

¿Alguien conoce la explicación?
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine

Última edición por Ñuño Martínez fecha: 11-01-2007 a las 00:59:32.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
No puedo acceder a la búsqueda del foro Bicho La Taberna 7 13-09-2006 17:38:06
Clases derivadas kolo toure Varios 3 01-12-2004 21:43:31
Como puedo cambiar la propiedad de edicion y no edicion a un StringGrid1 ctronx Varios 2 25-06-2004 23:10:19
No puedo acceder remoto a IB wonder boy Conexión con bases de datos 1 23-03-2004 17:22:14
Conexion a BD Access 2000 protegida por cointraseña delphiladero Conexión con bases de datos 5 06-06-2003 23:36:41


La franja horaria es GMT +2. Ahora son las 14:37:17.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi