Traits herencia multiple
En este ejemplo crearemos un traitsque sirva de contador de la pagina, definienfo un poco Los rasgos («traits» en inglés) son un mecanismo de reutilización de código en lenguajes de herencia simple, como PHP. El objetivo de un rasgo es el de reducir las limitaciones propias de la herencia simple permitiendo que los des arrolladores reutilicen a voluntad conjuntos de métodos sobre varias clases independientes y pertenecientes a clases jerárquicas distintas. La semántica a la hora combinar Traits y clases se define de tal manera que reduzca su complejidad y se eviten los problemas típicos asociados a la herencia múltiple y a los Mixins. (Ref. PHP).
Aqui un ejemplo utilizando el contador:
<?php
namespace a;
require "prueba.php";
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Traits herencia multiple</title>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
<section>
<?php
//utilizar conu¡çjunto de metodos pertenecientes a clases emanticas distintas
trait Hola{
public function decirHolaMundo(){echo "Hola $this->obtenerMundo()";}
abstract public function obtenerMundo();
}
class HolaMundo(){
private $mundo;
//obteniendo el trait Hola
use Hola;
public function obtenerMundo(){return $this->mundo;}
public function asignarMundo($valor){
$this->mundo=$valor;
}
}//fin hola mundo
$a = new HolaMundo();
$a->asignarMundo("Jupiter");
echo $a->decirHolaMundo();
/////////////
trait contador{
public $x=100;
public function iniciar(){
static $n=0;
$n--;
echo "$n<br>";
}
}//fin trait contador
class z{
use contador;
public $x=100;
}
$z= new Z();
$z->iniciar();
$z->iniciar();
$z->iniciar();
echo $z->x;
?>
</section>
</body>
</html>
namespace a;
require "prueba.php";
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Traits herencia multiple</title>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
<section>
<?php
//utilizar conu¡çjunto de metodos pertenecientes a clases emanticas distintas
trait Hola{
public function decirHolaMundo(){echo "Hola $this->obtenerMundo()";}
abstract public function obtenerMundo();
}
class HolaMundo(){
private $mundo;
//obteniendo el trait Hola
use Hola;
public function obtenerMundo(){return $this->mundo;}
public function asignarMundo($valor){
$this->mundo=$valor;
}
}//fin hola mundo
$a = new HolaMundo();
$a->asignarMundo("Jupiter");
echo $a->decirHolaMundo();
/////////////
trait contador{
public $x=100;
public function iniciar(){
static $n=0;
$n--;
echo "$n<br>";
}
}//fin trait contador
class z{
use contador;
public $x=100;
}
$z= new Z();
$z->iniciar();
$z->iniciar();
$z->iniciar();
echo $z->x;
?>
</section>
</body>
</html>
Comentarios
Publicar un comentario