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

Definir una clase como propiedad de otra clase

Estas en el tema de Definir una clase como propiedad de otra clase en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Una cuestión sobre la POO en php a ver si alguien me la puede contestar con un pequeño ejemplo. Supongamos una pequeña aplicación de gestión ...
  #1 (permalink)  
Antiguo 07/02/2005, 09:21
 
Fecha de Ingreso: febrero-2005
Mensajes: 28
Antigüedad: 19 años, 10 meses
Puntos: 1
Definir una clase como propiedad de otra clase

Una cuestión sobre la POO en php a ver si alguien me la puede contestar con un pequeño ejemplo.
Supongamos una pequeña aplicación de gestión de archivo de Películas.
Tenemos 2 tablas:
Generos (GeneroID, Descripcion)
Para introducir los géneros: Terror, Drama, etc.
Películas (PeliculaID, Titulo, GeneroID)
Para introducir películas y a que género pertenecen

Definimos 2 clases:

Class Genero
{
function __construct(CodigoGenero)
{
//Aquí podemos codificar acceso a la tabla
...
}
Public GeneroID;
Public Descripcion;
// Aqui podemos codificar algún método
...
}

Y

Class Pelicula
{
function __construct(CodigoPelicula)
{
//Aquí podemos codificar acceso a la tabla
...
}
Public PeliculaID;
Public Titulo;
¿¿¿¿¿Public Genero;?????
// Aqui podemos codificar algún método
...
}

Lo correcto sería que la propiedad Genero sea una referencia a la clase
Genero (ojo no es herencia) para poder esto:

<?php
// Clase para crear una colección de Películas
class Peliculas
{
...
function Show()
{
...
foreach ($this->colPeliculas as $objPelicula)
{
print $objPelicula->Descripcion ." " . $objpelicula->Genero->Descripcion
}
}
?>

La pregunta es ¿cuando inicalizamos la propiedad Genero?
En VB 6.0 la instrucción Property Get facilitaba las cosas al permitir
inicializar una propiedad que es un objeto solo cuando se hace referencia
a ella. Por lo que he podido ver en C++ se utiliza la definición Friend
¿Como se hace en php?,
¿en que momento y como se inicializa el objeto Genero en la clase película?

Gracias a todos y si puedo aportar algo en POO lo intento.
  #2 (permalink)  
Antiguo 07/02/2005, 17:27
 
Fecha de Ingreso: febrero-2005
Mensajes: 28
Antigüedad: 19 años, 10 meses
Puntos: 1
Autocontestación

Ya lo he averiguado, pongo un ejemplo por si a alguien le interesa
el tema de las clases amigas:

En la Clase pincipal (Pelicula) que tiene una propiedad (Genero) que es una clase se pone lo siguiente:

Public $Titulo
function Genero()
{
$objGenero = new Genero($this->GeneroCinematograficoID);
return $objGenero;
}

Para imprimir el título de la Pelicula y el género:

<?php
// index.php
include("header.php");
$objPelicula = new Pelicula(1);
print "<br>".$objPelicula->Descripcion;
print "<br>".$objPelicula->Genero()->Descripcion;
include("footer.php");
?>
  #3 (permalink)  
Antiguo 07/02/2005, 19:55
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 23 años, 1 mes
Puntos: 69
Alberanonn, tu ejemplo está plagado de buena intención, pero lamentablemente de mal código.
Pero si, la respuesta es que si se puede tener un objeto como atributo de otro objeto, como en casi todo lenguaje orientado a objetos. Este método de asociar dos objetos es llamado "Composición".

Código PHP:
<?php
class Objeto 1
{
    var 
$atributo null;

    function 
Objeto1()
    {
        
$this->atributo =& new Objeto2();
    }

    function &
getAtributo()
    {
         return 
$this->atributo;
    }
}
?>
Luego, la manera de invocarlo correctamente, sería :

Código PHP:
<?php
$obj1 
=& new Objeto1();
echo 
$obj1->atributo->metodo_de_Objeto2();
?>
Espero que te sirva
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com

Última edición por Webstudio; 08/02/2005 a las 12:42 Razón: corregidas unas cositas.
  #4 (permalink)  
Antiguo 08/02/2005, 08:30
 
Fecha de Ingreso: febrero-2005
Mensajes: 28
Antigüedad: 19 años, 10 meses
Puntos: 1
Ok, fabuloso, no conocía que &getAtributo() me devuelve atributo, he estado varios años con VB y en PHP llevo 1 mes y medio así que empapandome con libros, manuales y los foros.

Muchas gracias
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 02:44.