<?php
class Kitchen
{
private $yummy = 'cake';
}
class MapperX
{
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'];
}
}
class Mapper
{
public function setYummy(Kitchen $kitchen, array $data)
{
return function (Kitchen $kitchen) {
$kitchen->yummy = $data['yummy'];
}
}
}
$kitchen = new Kitchen;
$mapper = new Mapper;
$clj = $mapper->setYummy($kitchen, ['yummy' => 'cookie']);
$clj->bindTo($kitchen);
$clj();
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));
*/
- Output for 5.4.2 - 5.4.45, 5.5.24 - 5.5.30, 5.6.7 - 5.6.14
- Parse error: syntax error, unexpected '}' in /in/YvAlM on line 35
Process exited with code 255.
preferences:
191.15 ms | 1395 KiB | 65 Q