Η php από την έκδοση 5.4 και μετά έχει τη δυνατότητα χρήσης των traits, είναι ένας μηχανισμός με το οποίο οποία μπορούμε να ελαχιστοποιήσουμε τη χρήση του διπλότυπου κώδικα. Αυτό είναι ένα χρήσιμο χαρακτηριστικό στην PHP, αυτό γιατί είναι μια γλώσσα προγραμματισμού η οποία ανήκει στη κατηγορία single inheritance languages, αυτό σημαίνει ότι μία κλάση δεν μπορεί  κληρονομήσει μεθόδους παρά μόνο από μιά άλλη και η βασική χρήση είναι το code reuse.

Τα traits είναι κλάσεις από τις οποίες δεν μπορούν να δημιουργηθούν στιγμιότυπα (objects) αλλά είναι χρήσιμα στην εξάλειψη του συχνά επαναλαμβανόμενου κώδικα. Μοιάζουν με abstract class αλλά η κύρια η διαφορά είναι δεν χρειάζεται να γίνει implementation της κληρονομικότητας, όπως είναι υποχρεωτικό σε μία abstract class. Τα abstact χρησιμοποιούνται ως πρότυπο και περιέχουν λειτουργικές μεθόδους για να καθοριστεί ο τρόπος συμπεριφοράς σε child classes. Βασικές έννοιες και το συστηματικό refactoring του πηγαίου κώδικο είναι απαραίτητο στο toolkit κάθε php developer.

Αλλά ας συνεχίσουμε να δούμε τη διαφορά ενός trait με ένα  interface, όπου αποτελεί ένα blueprint για κλάσει που θα κάνουν implement συγκεκριμένες μεθόδους δηλαδή υποχρεώνει ένα συγκεκριμενο τρόπο συμπεριφοράς σε κλάσεις που θα κάνουν implement το interface

Τρόπος χρήσης 

trait message 
{
public function hello()
{ return "hello"; } }
class user()
{   use message; }
$user = new user();

$user->hello();

Πραγματικό Παράδειγμα

Ένα παράδειγμα πραγματικής χρήσης είναι στο πακέτο ανοιχτού κώδικα Laravel Cashier όπου δίνει τη δυνατότητα δημιουργίας subscriptions σε web εφαρμογές. Απλά μπορούμε να δούμε τη χρήση ενός trait αν εξετάσουμε το πηγαίο κώδικα απλά παρατηρήστε

https://github.com/laravel/cashier/blob/9.0/src/Billable.php

Έχει δημιουργήσει ένα trait Billable με βασικές μεθόδους

Charge, Refund, hasCardOnFile, tab, invoiceFor, newSubscription, onTrial

Πότε θα χρησιμοποιούμε  treats

Ο πιο κατάλληλη χρήση μια τέτοια κλάσης είναι όταν θέλουμε να χρησιμοποιήσουμε ένα κομμάτι κώδικά σε πόλλες κλάσεις οι οποίες δεν  συσχετίζονται μεταξύ τους άμεσα. Μόνος τα Trait μπορουν γίνουν mixin  σε διαφορετικά μέρης στην ιεραρχία των κλάσεων.