- var_dump: documentation ( source)
<?php
class User {
private $id;
private $username;
}
class Hydrator
{
private $propertyMap = array();
private $valueFilters = array();
public function setPropertyMap(array $propertyMap)
{
$this->propertyMap = $propertyMap;
}
public function setValueFilters(array $filters)
{
$this->valueFilters = $filters;
}
public function generate()
{
$propertyMap = $this->propertyMap;
$valueFilters = $this->valueFilters;
return function (array $row) use ($propertyMap, $valueFilters) {
var_dump($this);
foreach ($row as $k => $v) {
$property = isset($propertyMap[$k]) ? $propertyMap[$k] : $k;
$value = isset($valueFilters[$k]) ? $valueFilters[$k]($v) : $v;
$this->{$property} = $v;
}
};
}
public function hydrate($obj, array $data)
{
$fn = $this->generate()->bindTo($obj, $obj);
$fn($data);
return $obj;
}
}
class MySqlUserMapper {
public function fetchByUsername($username) {
$row = array(
'id' => '1',
'username' => $username,
);
$user = new User;
$this->hydrate($user, $row);
return $user;
}
private function hydrate(User $user, array $row) {
static $hydrator;
if (!$hydrator) {
$hydrator = new Hydrator();
$hydrator->setValueFilters(array(
'id' => 'intval'
));
}
return $hydrator->hydrate($user, $row);
}
}
$mapper = new MySqlUserMapper();
var_dump($mapper->fetchByUsername('mabe'));