Inicio
Software
Programación
HTML Programación - PHP (ini) Programación - PHP POO Programación - PHP / HTML SQL Java
Hardware
Desarrollos
Quién soy Mapa del sitio

PHP - POO Completo 7

Imprimir
Categoría: PHP - POO Completo
Escrito por Ch4rl1X Visitas: 1090

Aquí de nuevo trayendo clases colaboradoras, son un conjunto de clases a las cuales podemos completar con otras (por decirlo de alguna manera).

Esta parte de la programación es algo más compleja, ya que para que se logre se tiene que tener bien claro cuales son los conceptos a utilizar y como conviven (en mi caso siempre surge de la utilización y evolución de mis aplicaciones), para entenderlos usamos el concepto de una web la cual se compone de cabecera, cuerpo y pie.

Si piensan en que todas los objetos que escribimos constan de getters y setter estamos de acuerdo. Creamos la clase Cabecera que construirá el título de la página. Creamos el cuerpo que se compone del array $lineas y a diferencia de los otros no contiene constructor, que como mencionamos anteriormente y dada las condiciones de nuestra clase no podría contener un constructor ya que el método graficar tiene un for (al método lo llamamos más de una vez). Finalizamos la construcción de la página con Pie y luego creamos la página propiamente dicha.

<html>
<head>
<title>POO_full_8</title>
</head>
<body>
<?php
/*
Colaboración de objetos
Creamos la clase cabecera la que contiene el título*/
class Cabecera { //Colaborador de la clase página
/*Se define el atributo $titulo que se ejecuta con el constructor*/
  private $titulo;
  public function __construct($tit)
  {
/*Llenamos el parámetro*/
    $this->titulo=$tit;
  }
  public function graficar()
  {
/*Se muetra el valor*/
    echo '<h1 style="text-align:center">'.$this->titulo.'</h1>';
  }
}

class Cuerpo { //Colaborador de la clase página
/*Creamos líneas como array*/
  private $lineas=array();
  public function insertarParrafo($li)
  {
/*Definimos el atributo como valor del parámetro*/
    $this->lineas[]=$li;
/*Recordemos que el corchete en $this->lineas[] nos permitiran llenar el array con un contenido
numérico automáticamente lo que permite en el búcle for almacenar la cantidad de registros */
  }
  public function graficar()
  {
/*Si hay más de una línea se guardará como f*/
    for($f=0;$f<count($this->lineas);$f++)
    {
/*Al utilizar $this->lineas[$f] estamos diciendo que nos muestre el contenido del array asociado al valor que le demos*/
      echo '<p>'.$this->lineas[$f].'</p>';
    }
  }
}
/*Idem Cabecera*/
class Pie { //Colaborador de la clase página
  private $titulo;
  public function __construct($tit)
  {
    $this->titulo=$tit;
  }
  public function graficar()
  {
    echo '<h4 style="text-align:center">'.$this->titulo.'</h4>';
  }
}

class Pagina { //Creador de página en base a las clases Cabecera, Cuerpo y Pie
/*Se vuelve a crear cabecera para instanciarlo en el constructor*/
  private $cabecera;
/*Se vuelve a crear cuerpo idem*/
  private $cuerpo;
  private $pie;
  public function __construct($texto1,$texto2)
  {
/*Aquí ocurre todo, llenamos el atributo $cabecera con el valor de la clase Cabecera, como se construye a través
de un parámetro se lo pasamos como $texto1 */
    $this->cabecera=new Cabecera($texto1);
/*Levantamos el cuerpo que no tiene constructor, porque los constructores se ejecutan una vez definiendo 
la configuración de la clase y como tenemos un 
for que devuelve la cantidad de parrafos se que obtengan no tiene sentido definirlo como constructor*/
    $this->cuerpo=new Cuerpo();
/*Idem cuerpo*/
    $this->pie=new Pie($texto2);
  }
  public function insertarCuerpo($texto)
  {
    $this->cuerpo->insertarParrafo($texto);
  }
  public function graficar()
  {
/*Finalmente imprimimos cabecera llenando el atributo $cabecera con el parámetro de la clase y así también para el resto*/
    $this->cabecera->graficar();
    $this->cuerpo->graficar();
    $this->pie->graficar();
  }
}
/*Finalmente creamos la clase página que envia los parámetros a las clases colaboradoras*/
$pagina1=new Pagina('CharlesWeb','<-fin->');

$pagina1->insertarCuerpo('Esto es una prueba que debe aparecer dentro del cuerpo de la página 1');
$pagina1->insertarCuerpo('Esto es una prueba que debe aparecer dentro del cuerpo de la página 2');
$pagina1->insertarCuerpo('Esto es una prueba que debe aparecer dentro del cuerpo de la página 3');
$pagina1->insertarCuerpo('Esto es una prueba que debe aparecer dentro del cuerpo de la página 4');
$pagina1->insertarCuerpo('Esto es una prueba que debe aparecer dentro del cuerpo de la página 5');
$pagina1->insertarCuerpo('Esto es una prueba que debe aparecer dentro del cuerpo de la página 6');
$pagina1->insertarCuerpo('Esto es una prueba que debe aparecer dentro del cuerpo de la página 7');
$pagina1->insertarCuerpo('Esto es una prueba que debe aparecer dentro del cuerpo de la página 8');
$pagina1->insertarCuerpo('Esto es una prueba que debe aparecer dentro del cuerpo de la página 9');
$pagina1->graficar();
?>
</body>
</html>

Para esta super clase que colabora con el resto, creamos los atributos $cabecera, $cuerpo y $pie con un constructor que pasa los valores $texto1 y texto2. Se observa que para pasar los parámetros de los métodos directamente se instancia al objeto y se pasa el parámetro. Insertamos el cuerpo llamando al método de la clase cuerpo completándolo con el parámetro $texto para finalmente visualizar a través de graficar los métodos de cada uno de las clases a las que accedimos.

Resultado -> Click aquí para visualizar

Espero que sirva, saludos, Ch4rl1X!