Traits in php provide a mechanism for reusing code outside of a class hierarchy. Traits allow you to share functionality across different classes that don’t (and shouldn’t) share a common ancestor in a class hierarchy.
trait traitname [ extends baseclass ]
{
[ use traitname, [ traitname, … ]; ]
[ visibility $property [ = value ]; … ]
[ function functionname (args) {
// code
}
…
]
}
To declare that a class should include a trait’s methods, include the use keyword and any number of traits, separated by commas:
trait Logger
{
public log($logString)
{
$className = __CLASS__;
echo date("Y-m-d h:i:s", time()) . ": [{$className}] {$logString}";
}
}
class User
{
use Logger;
public $name;
function __construct($name = '')
{
$this->name = $name;
$this->log("Created user '{$this->name}'");
}
function __toString()
{
return $this->name;
}
}
class UserGroup
{
use Logger;
public $users = array();
public addUser(User $user)
{
if (!$this->includesUser($user)) {
$this->users[] = $user;
$this->log("Added user '{$user}' to group");
}
}
}
$group = new UserGroup;
$group->addUser(new User(“Franklin”));
2012-03-09 07:12:58: [User] Created user ‘Franklin’
2012-03-09 07:12:58: [UserGroup] Added user ‘Franklin’ to group