On gists
Transaction via callback ;)
Nette
PHP
example.php
Raw
#
<?php
// https://forum.nette.org/cs/22304-zavislost-jednoho-modelu-na-jinych
/**
* @param Closure $callback
*/
private function doInTransaction(Closure $callback)
{
$this->isInTransaction = TRUE;
$callback();
$this->isInTransaction = FALSE;
}
// usage
// any class
private $isInTransaction = FALSE;
/**
* @param int $id
* @param Player $owner
*/
public function __construct($id, Player $owner)
{
$this->id = $id;
$this->owner = $owner;
$this->doInTransaction(function () use ($owner) {
$owner->receiveItem($this);
});
}
/**
* @param Player $newOwner
*/
public function changeOwner(Player $newOwner)
{
if ($this->owner !== $newOwner) {
$this->doInTransaction(function () use ($newOwner) {
$this->owner->giveItem($this);
$this->owner = $newOwner;
$this->owner->receiveItem($this);
});
}
}