Retroceder   Foros del Web > Programación para sitios web > PHP > PHP orientado a objetos

Respuesta
 
Herramientas Desplegado
Antiguo 07-feb-2005, 08:21   #1 (permalink)
alberanonn ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2005
Mensajes: 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 está desconectado   Responder Citando
Antiguo 07-feb-2005, 16:27   #2 (permalink)
alberanonn ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2005
Mensajes: 21
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");
?>
alberanonn está desconectado   Responder Citando
Antiguo 07-feb-2005, 18:55   #3 (permalink)
Colaborador
Webstudio tiene algunos puntos positivos de karma
 
Avatar de Webstudio
 
Fecha de Ingreso: noviembre-2002
Ubicación: 127.0.0.1
Mensajes: 3.343
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
__________________
Productos en Venta | Hoy-Vendo.com.ar
Artículos PHP | ZonaPHP.com

Última edición por Webstudio; 08-feb-2005 a las 11:42. Razón: corregidas unas cositas.
Webstudio está desconectado   Responder Citando
Antiguo 08-feb-2005, 07:30   #4 (permalink)
alberanonn ha deshabilitado el karma
 
Fecha de Ingreso: febrero-2005
Mensajes: 21
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
alberanonn está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 11:18.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93