<?php
trait HTML {
public function close($tag){
return str_replace("<", "</", $tag);
}
public function wrap($global, $local,$tabla) {
$res = $global;
foreach ($tabla as $valor) {
$res .= $local.$valor.$this->close($local);
}
return $res . $this->close($global);
}
public function lista($tabla) {
return $this->wrap("<ul>","<li>",$tabla);
}
//Crear una función select que nos cree un select con los elementos de la tabla que le pasemos
public function select($tabla) {
return $this->wrap("<select>","<option>",$tabla);
}
}
//Crear un trait Tablas que incorpore una función duplicados que nos devuelva un array con los elementos duplicados
trait Tablas{
public function duplicados($tabla){
$res= array_count_values($tabla);
$aux=[];
foreach($res as $c=>$v){
if($v>1){
$aux[]=$c;
}
}
return $aux;
}
public function duplicadosPro($tabla){
return array_unique(array_diff_key($tabla, array_unique($tabla)));
}
}
class EjemploTrait {
use HTML,Tablas;
public $datos = [1, 2, 3,2, 4, 2,3, "hola"];
function __toString() {
return $this->lista($this->duplicadosPro($this->datos));
}
}
$a = new EjemploTrait();
echo $a;
Selector colores
Crear formas con CSS.
Clase Aula con get y set
class Aula {
//propiedades nombre de tipo string y capacidad de tipo entero privadas
//Crear constructor con nombre obligatorio y capacidad opcional (por defecto 15)
//Crear getters y setters: El nombre no puede estar vacío y la capacidad entre 10 y 100
private $nombre;
private $capacidad;
function __construct(string $nombre, int $capacidad = 15) {
$this->setNombre($nombre);
$this->setCapacidad($capacidad);
}
function getNombre() {
return $this->nombre;
}
function getCapacidad() {
return $this->capacidad;
}
function setNombre(string $nombre) {
if (!empty($nombre)) {
$this->nombre = $nombre;
} else {
throw new Exception('El nombre no puede estar vacío');
}
}
function setCapacidad(int $capacidad) {
if ($capacidad < 10 || $capacidad > 100) {
throw new Exception('Capacidad entre 10 y 100');
} else {
$this->capacidad = $capacidad;
}
}
}
try {
$a = new Aula("Nombre");
$a->setCapacidad(500);
} catch (Exception $ex) {
echo $ex->getMessage() . " en la línea " . $ex->getLine();
}
Ejemplo herencia en PHP
class Producto {
public $nombre;
public $precio;
function __construct($nombre, $precio = 0) {
$this->nombre = $nombre;
$this->precio = $precio;
}
function resumen() {
return $this->nombre . " " . $this->precio;
}
function pvp() {
return $this->precio * 1.21;
}
}
class Cd extends Producto {
public $longitud;
}
$nuevoCd=new Cd('Reggeton mix');
$nuevoCd->longitud=90;
$nuevoCd->precio=20;
var_dump($nuevoCd);
//Crear una clase libro con propiedad páginas que derive de producto
class Libro extends Producto{
public $paginas;
//Sobreescribir el constructor añadiendo el parámetro páginas
function __construct($nombre, $paginas, $precio = 0) {
parent::__construct($nombre, $precio);
$this->paginas=$paginas;
}
//Sobreescribimos el método de la clase madre
function resumen(){
//Invocamos el método de la clase madre
return parent::resumen()." ".$this->paginas;
}
}
class LibroAntiguo extends Libro{
public $anyo;
function __construct($nombre, $paginas,$anyo, $precio = 0) {
parent::__construct($nombre, $paginas, $precio);
$this->anyo=$anyo;
}
}
$nuevoLibro=new Libro('El Quijote',400);
echo $nuevoLibro->resumen();
$antiguo=new LibroAntiguo('Quijote',500,1754);
echo $antiguo->resumen();
Qué trabajo debes escoger según las series que te gusten
Planificación de seis semanas
Subir imágenes a Symfony
La plantilla:
<form action="areas/imagen" method="post" enctype="multipart/form-data">
<input type="file" name="imagen"><br/>
<input type="submit">
</form>
El controlador:
/**
* @Route("/areas/imagen", name="imagen")
*/
public function imagen() {
$destino= $this->get('kernel')->getProjectDir()."/public/upload";
$request = Request::createFromGlobals();
$archivo = $request->files->get('imagen');
$archivo->move($destino,$archivo->getClientOriginalName());
return $this->render('areas/index.html.twig');
}
Errores comunes en AMP y cómo evitarlos
Con sólo 22 líneas de JavaScript se robaron datos de 380.000 clientes
Lo cuentan en Microsiervos:
Las 22 líneas de JavaScript que permitieron el robo de datos de 380.000 clientes de British Airways