- var_dump: documentation ( source)
- spl_object_hash: documentation ( source)
<?php
// note that copy() is a proper alternative to __clone()
interface Any
{
function getHash();
function equals();
}
class Mutable implements Any
{
protected $baz;
function __construct(string $baz){
$this->setBaz($baz);
}
function setBaz(string $baz){
$this->baz = $baz;
}
function getBaz(){
return $this->baz;
}
function getHash(){
return Immutable::CLASS . "|" . spl_object_hash($this);
}
function equals($other){
return $this->getHash() === $other->getHash();
}
function copy(){
return new static($this->baz);
}
}
class Immutable implements Any
{
protected $baz;
function __construct(string $baz){
$this->baz = $baz;
}
function getHash(){
return Mutable::CLASS . "|" . $this->baz;
}
function equals($other){
return $this->getHash() === $other->getHash();
}
function copy(){
return $this;
}
}
var_dump((new Immutable("baz"))->equals(new Immutable("baz"))); // true
var_dump((new Immutable("bar"))->equals(new Immutable("bar"))); // true
var_dump((new Mutable("baz"))->equals(new Mutable("baz"))); // false
var_dump((new Mutable("bar"))->equals(new Mutable("bar"))); // false