Salut à tous,

je ne sais pas si vous l'avez vu ou non, je pense que pour la plupart, ca n'a pas été le cas, je viens donc l'annoncer à tous : la version 5.4.0 de php est sortie aujourd'hui bon j'ai peut etre un peu de retard du a la publication tardive des news sur leur page fb et que je n'ai pas leur rss

Au menu (je cite l'article) :

  • 100 bugs résolus
  • des "traits" je n'ai pas bien compris ce que c'etait
  • amélioration des performances

voilou ce que je peux dire à 23h avant de dormir :o
si vous avez des choses à rajouter, n'hésitez pas !

Si vous savez egalement comment migrer lorsqu'on est avec mamp pro :) (j'ai pas encore cherché mais ca ne serait tardé)

3 réponses


Que sont les « Traits » ?
Les traits sont un mécanisme de réutilisation de code dans un langage à héritage simple tel que PHP. Un trait tente de réduire certaines limites de l’héritage simple en autorisant le développeur à réutiliser un certain nombre de méthodes dans des classes indépendantes. La sémantique entre les classes et les traits réduit la complexité et évite les problèmes typiques de l’héritage multiple et des Mixins.

Un trait est semblable à une classe, mais il ne sert qu’à grouper des fonctionnalités d’une manière intéressante. C’est un ajout à l’héritage traditionnel qui autorise la composition horizontale de comportements, c’est à dire l’utilisation de méthodes de classe sans besoin d’héritage.

source

Je n'ai pas trop compris non plus :p

Une des démonstration les plus simple pour l'utilisation des traits est le design pattern singleton. Certes, c'est un exemple simple qui peut être contourné facilement par d'autres procédés mais il reste un exemple qui permet d'expliquer l'intérêt des traits sur certaines parties de code.

En principe, on implémente ce design pattern de cette manière :

<?php
class A {
    private static $instance;
    private function __construct() {}
    private function __clone() {}
    public function getInstance() { if(!(self::$instance instanceof self)) self::$instance = new self();
        return $instance;
    }
}

On devrait donc copier ce bout de code pour chacunes des classes qui doivent être instanciée qu'une fois.

C'est à ce moment qu'un des aspects des traits permet de s'affranchir cet malédiction du code répété. En effet, il est possible, grâce aux traits, de définir une méthode qui sera utiliser par toutes les classes qui utilisent ce trait en particulier. Ainsi on en revient à écrire :

trait Singleton
{
    private static $instance;
    public static function getInstance() {
        if (!(self::$instance instanceof self)) {
            self::$instance = new self;
        }
        return self::$instance;
    }
}
/* Utilisation par nos objets */
class A extends B {
    use Singleton
}

Et voilà on crée nos objets de la même manière mais on ne répète pas du code inutilement.
C'était un exemple trivial qui n'est pas forcement la meilleur manière de voir les traits, ils permettent plus de choses.

Flohw
Auteur

d'accord, j'ai compris, je ne pense pas l'utiliser dans les prochains mois mais j'ai compris et je sais que ca existe :)

est il possible de faire hériter les traits ?