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