Traits en PHP 5.4

¿Qué son Traits?

Los Traits son un mecanismo de programación que provee un conjunto de métodos que conforman un bloque de comportamiento, que actúa como una unidad reusable. Son una unidad de reuso similar a las clases. Sin embargo, funcionan siempre como un complemento para éstas, no pueden ser instanciados. En simples términos y como más de uno ha comentado, son como un “copy&paste asistido”.

Los beneficios son el reuso de código y permitir que las clases pueden seguir el formato de herencia simple y aun así poder implementar diferencias de comportamiento con respecto a sus superclases.

Un ejemplo – Comportamiento Singleton

trait Singleton {

	private static $_instance = NULL;

	private function __construct() {...}

	static public function getInstance() {
		if (self::$_instance == NULL) {
			self::$_instance = new self();
		}
		return self::$_instance;
	}
}

class Manager extends AppManager {
    use Singleton;
	...
}

class Editor extends AppEditor {
    use Singleton;
    ...
}

De esta manera, ambas clases Manager y Editor se comportan según el patrón Singleton:

Manager::getInstance();
Editor::getInstance();

Fuentes

  • http://simas.posterous.com/new-to-php-54-traits
  • http://wiki.php.net/rfc/traits
  • http://wiki.php.net/rfc/horizontalreuse