> Am 25.11.2014 um 22:26 schrieb Marc Bennewitz: > >> Hi internals, >> >> In OOP it's a sometimes a common issue to know the state of an object and >> to know if it was changed respectively it it can change state. >> >> We already have such objects like DateTImeImmutable and new proposed >> objects like UString also introduce immutable objects. >> >> I think it would be really helpful to see this kind of issue addressed in >> a standardized way: >> >> if you approve with this I would write down a more structured RFC. >> >> Now see the following code snipped: >> >> <?php >> >> immutable class MyImmutableClass { >> public static $staticProperty = 'private static'; >> public $ts; >> public $obj; >> >> public function __construct($obj = null) { >> $this->ts = time(); >> $this->setObj($obj); >> } >> >> public function getTimestamp() { return $this->ts; } >> public function getObj() { return $this->obj; } >> public function setObj($obj) { $this->obj = $obj; } >> } >> >> // initialize >> $obj = new DateTImeImmutable(); >> $obj = new MyImmutableClass($obj); >> >> // check if immutable >> var_dump(MyImmutableClass::immutable); >> var_dump($obj::immutable); >> >> // read properties >> var_dump($obj->ts, $obj->obj); >> var_dump($obj->getTimestamp(), $obj->getObj()); >> >> // ERROR: Immutable objects can not contain mutable properties >> $obj = new MyImmutableClass(new stdClass); >> >> // ERROR: Immutable objects can not be changed after initialization >> $obj = new MyImmutableClass(); >> $obj->setObj($obj); >> $obj->obj = $obj; >> >> // ERROR: It's not allowed to change immutable variables >> MyImmutableClass::$staticProperty = 'new value'; >> >> ?> >> >> Because of for immutable objects it's not allowed to set an mutable object >> as property >> you can be sure the object's state will be consistent. That's the main >> difference from >> marking all properties readonly or similar functionalities. >> >> Additionally it's simple to test if an class/object is immutable and >> document it for free. >> >> Downside: New Keyword "immutable"
What I think is more useful is C++'s const, which basically makes any structure immutable when you need it. However, I don't think it's worth going through the effort to bring this to PHP, as you would have to add checks for preventing state changes in many places at runtime. -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php