<?php
class Kitchen
{
private $yummy = 'cake';
}
class Mapper
{
public function map(Kitchen $kitchen, array $data)
{
$mapper = $this;
$map = function (Kitchen $kitchen, array $data) use ($mapper) {
$mapper->setYummy($kitchen, $data);
};
$map = Closure::bind($map, null, $kitchen);
$map($kitchen, $data);
}
public function setYummy(Kitchen $kitchen, array $data)
{
$kitchen->yummy = $data['yummy'];
}
}
$kitchen = new Kitchen;
$mapper = new Mapper;
$mapper->map($kitchen, ['yummy' => 'cookie']);
var_dump($kitchen);
/*
$sweetsThief = function (Kitchen $kitchen) {
return $kitchen->yummy;
};
$sweetsCop = function (Kitchen $kitchen, $yummy) {
$kitchen->yummy = $yummy;
};
$kitchen = new Kitchen();
$sweetsThief = Closure::bind($sweetsThief, null, $kitchen);
$sweetsCop = Closure::bind($sweetsCop, null, $kitchen);
var_dump($sweetsThief($kitchen));
$sweetsCop($kitchen, 'lie');
var_dump($sweetsThief($kitchen));
*/
preferences:
38.09 ms | 402 KiB | 5 Q