Immutable Setter
Tiny utillity class that helps you making your classes immutable by adding wither methods., (*1)
Inspired by Lombok's @Wither annotation., (*2)
It lets you easily add witherX methods to clone object with modified one property., (*3)
Installation
Use composer to get library from packagist:, (*4)
$ php composer.phar require kamilwylegala/immutable-setter
Usage
- Add
wither field to your class.
- Assign
new Wither($this, ["arg1", "arg2"]) to this field and provide constructor schema with proper order of arguments. You can also skip second argument and let Wither resolve constructor arguments automatically.
- Add public
withArg1 method to your class and put:
return $this->wither->getInstance("arg1", $newArg1)
- Running
$valueObject->withArg1($newArg1) will create copy of your object with changed $arg1 field.
Example
use KamilWylegala\ImmutableSetter\Wither;
class Person
{
private $name;
private $age;
private $wither;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
$this->wither = new Wither($this, ["name", "age"]); //Second param is optional.
}
public function withName($newName)
{
return $this->wither->getInstance("name", $newName);
}
}
Tests
Install dev dependencies and run in root:, (*5)
$ vendor/bin/phpunit
Licence
MIT, (*6)