<?php
class ImmutableObject
{
private $property;
public function __construct($property)
{
$this->property = $property;
}
public function withProperty($property)
{
$clone = clone($this);
$clone->property = $property;
return $clone;
}
public function getProperty()
{
return $this->property;
}
}
class BrokenImmutableObject
{
private $property;
public function __construct($property)
{
$this->property = $property;
}
public function withProperty($property)
{
if ($property == $this->property) {
return $this;
}
$clone = clone($this);
$clone->property = $property;
return $clone;
}
public function getProperty()
{
return $this->property;
}
}
function it($m,$p){echo ($p?'✔︎':'✘')." It $m\n"; if(!$p){$GLOBALS['f']=1;}}function done(){if(@$GLOBALS['f'])die(1);}
foreach (array('ImmutableObject', 'BrokenImmutableObject') as $class) {
print "\n".$class."\n".str_repeat('=', strlen($class))."\n\n";
// Expectation, $start will always have value 'start'
$start = new $class('start');
// Expectation, $next is an immutable copy of $start with value 'start'
$next = $start->withProperty('start');
// Expectation, $end is an immutable copy of $start with value 'end'
$end = $start->withProperty('end');
it('has the value "start" (has value "'.$start->getProperty().'")', 'start' === $start->getProperty());
it('has the value "start" (has value "'.$next->getProperty().'")', 'start' === $next->getProperty());
it('has the value "end" (has value "'.$end->getProperty().'")', 'end' === $end->getProperty());
print "\n";
}
ImmutableObject
===============
✔︎ It has the value "start" (has value "start")
✔︎ It has the value "start" (has value "start")
✔︎ It has the value "end" (has value "end")
BrokenImmutableObject
=====================
✔︎ It has the value "start" (has value "start")
✔︎ It has the value "start" (has value "start")
✔︎ It has the value "end" (has value "end")
Output for 4.4.2 - 4.4.9
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/DN0de on line 5
Process exited with code 255.
Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/DN0de on line 5
Process exited with code 255.
Output for 4.3.2 - 4.3.4
Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in /in/DN0de on line 5
Process exited with code 255.