Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Frameworks y PHP orientado a objetos (http://www.forosdelweb.com/f68/)
-   -   Definir una clase como propiedad de otra clase (http://www.forosdelweb.com/f68/definir-clase-como-propiedad-otra-clase-268494/)

alberanonn 07/02/2005 09:21

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.

alberanonn 07/02/2005 17:27

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");
?>

Webstudio 07/02/2005 19:55

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

alberanonn 08/02/2005 08:30

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


La zona horaria es GMT -6. Ahora son las 19:59.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.