Traits en PHP


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