traitListTrait{publicfunctionlist(){$list=[];$sql=sprintf('SELECT %s, %s FROM %s',$this->key,$this->value,$this->table);$stmt=$this->connection->pdo->query($sql);while($item=$stmt->fetch(PDO::FETCH_ASSOC)){$list[$item[$this->key]]=$item[$this->value];}return$list;}}
class CountryListUsingTrait implements ConnectionAwareInterface
{
use ListTrait;
protected $connection;
protected $key = 'iso3';
protected $value = 'name';
protected $table = 'iso_country_codes';
public function setConnection(Connection $connection)
{
$this->connection = $connection;
}
}
namespace Application\Generic;
use PDO;
trait ListTrait
{
public function list()
{
// ...
}
}
trait Test
{
public function setId($id)
{
$obj = new stdClass();
$obj->id = $id;
$this->id = $obj;
}
}
class Base
{
protected $id;
public function getId()
{
return $this->id;
}
public function setId($id)
{
$this->id = $id;
}
}
class Customer extends Base
{
use Test;
protected $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
trait Test
{
protected $id;
public function getId()
{
return $this->id;
}
public function setId($id)
{
$this->id = $id;
}
public function setName($name)
{
$obj = new stdClass();
$obj->name = $name;
$this->name = $obj;
}
}
class Customer
{
use Test;
protected $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
trait IdTrait
{
protected $id;
public $key;
public function setId($id)
{
$this->id = $id;
}
public function setKey()
{
$this->key = date('YmdHis')
. sprintf('%04d', rand(0,9999));
}
}
trait NameTrait
{
protected $name;
public $key;
public function setName($name)
{
$this->name = $name;
}
public function setKey()
{
$this->key = unpack('H*', random_bytes(18))[1];
}
}
class Test
{
use IdTrait, NameTrait {
NameTrait::setKey insteadof IdTrait;
IdTrait::setKey as setKeyDate;
}
}
$customer = new Customer();
$customer->setId(100);
$customer->setName('Fred');
var_dump($customer);
$customer = new Customer();
$customer->setId(100);
$customer->setName('Fred');
var_dump($customer);
$a = new Test();
$a->setId(100);
$a->setName('Fred');
$a->setKey();
var_dump($a);
$a->setKeyDate();
var_dump($a);