rfc:immutability

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
rfc:immutability [2017/09/22 13:28] – external edit 127.0.0.1rfc:immutability [2018/02/19 21:13] marijic.silvio
Line 1: Line 1:
 ====== PHP RFC: Immutable classes and properties ====== ====== PHP RFC: Immutable classes and properties ======
-  * Version: 0.1 +  * Version: 0.2 
-  * Date: 2016-08-12+  * Date: 2018-02-19
   * Author: Michal Brzuchalski <michal@brzuchalski.com>   * Author: Michal Brzuchalski <michal@brzuchalski.com>
   * Author: Silvio Marijic <marijic.silvio@gmail.com>   * Author: Silvio Marijic <marijic.silvio@gmail.com>
Line 22: Line 22:
  
 **Cons** **Cons**
-  - (Please point it out more disadvantages)+  - Currently arrays on immutable properties are not supported.
  
  
Line 84: Line 84:
 </code> </code>
  
-Resources are not allowed to be assigned to immutable properties because of fact that resourcesby natureare not immutable.+Resources are not allowed to be assigned to immutable properties because of fact that resources by nature are not immutable.
 <code php> <code php>
 class File { class File {
Line 95: Line 95:
  
 $file = new File(fopen('file.txt')); $file = new File(fopen('file.txt'));
 +</code>
 +
 +Arrays are not allowed to be assigned to immutable properties..
 +<code php>
 +class A {
 +  public immutable $x;
 +
 +  public function __construct ($x) {
 +    $this->x = $x;
 +  }
 +}
 +
 +$a = new A(['foo']);
 </code> </code>
  
Line 121: Line 134:
 </code> </code>
  
 +==== Comparison ====
 +
 +Identity of immutable object is based on its value. So two immutable are identical if they are of the same type and contain same value.
 +
 +<code php>
 +immutable class Email {
 +  public $email;
 +
 +  public function __construct ($email) {
 +    // validation
 +
 +    $this->email = $email;
 +  }
 +}
 +
 +$email1 = new Email("foo@php.net");
 +$email2 = new Email("foo@php.net");
 +var_dump($email1 === $email2); // bool(true)
 +</code>
  
 ===== Examples ===== ===== Examples =====
Line 276: Line 308:
 ===== Proposed PHP Version(s) ===== ===== Proposed PHP Version(s) =====
  
- - PHP 7.2+ To be discussed.
  
 ===== RFC Impact ===== ===== RFC Impact =====
Line 307: Line 339:
 ===== Future Scope ===== ===== Future Scope =====
  
 +Add support for arrays on immutable properties.
 +Expand immutability to regular variables also.
  
 ===== Proposed Voting Choices ===== ===== Proposed Voting Choices =====
Line 314: Line 348:
  
 ===== Patches and Tests ===== ===== Patches and Tests =====
-[[https://github.com/php/php-src/compare/master...brzuchal:immutable]]+[[https://github.com/php/php-src/compare/master...smarijic:immutable-rfc]]
  
  
rfc/immutability.txt · Last modified: 2018/02/20 11:19 by marijic.silvio