![]() |
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. |
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, 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: Código PHP: |
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.