rfc:object-initializer

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
rfc:object-initializer [2019/09/16 13:48] – added note about constants brzuchalrfc:object-initializer [2019/10/24 07:36] (current) – closing vote, moving to declined brzuchal
Line 2: Line 2:
   * Version: 1.0   * Version: 1.0
   * Date: 2019-09-03   * Date: 2019-09-03
-  * Author: Michał Brzuchalski <michal.brzuchalski@gmail.com+  * Author: Michał Brzuchalski <brzuchal@php.net
-  * Status: Under Discussion+  * Status: Declined
   * First Published at: http://wiki.php.net/rfc/object-initializer    * First Published at: http://wiki.php.net/rfc/object-initializer 
- 
- 
  
 ===== Introduction ===== ===== Introduction =====
Line 82: Line 80:
 The main difference is that object initializers allow creating a new object, with its assigned properties in a single expression. For eg. factory methods where normally a significant amount of argument has default values or simple Data Transfer Objects could benefit. The main difference is that object initializers allow creating a new object, with its assigned properties in a single expression. For eg. factory methods where normally a significant amount of argument has default values or simple Data Transfer Objects could benefit.
  
-> Note! Currently, language allows instantiating object and initializing only a subset of typed non-nullable properties without a default value. These rules apply to object initializer the same way, meaning the creation of properly initialized object state is in authors responsibility, cause object initializer is a simplification as mentioned before.+**Note!** Currently, language allows instantiating object and initializing only a subset of typed non-nullable properties without a default value. These rules apply to object initializer the same way, meaning the creation of properly initialized object state is in authors responsibility, cause object initializer is a simplification as mentioned before.
  
 ==== Restrictions ==== ==== Restrictions ====
Line 108: Line 106:
 Due to the fact that objects in PHP simply have constructor directly declared in class definition or indirectly through the defaulting constructor, creating a class instance and initializing properties through initializer block will effect in invoking constructor and assign property values after instantiation. Due to the fact that objects in PHP simply have constructor directly declared in class definition or indirectly through the defaulting constructor, creating a class instance and initializing properties through initializer block will effect in invoking constructor and assign property values after instantiation.
  
-> Note! Object instantiation allows only constructors without required arguments to be used. Any class which requires passing arguments to constructor cannot be used in combination with object initializer. +**Note!** Object instantiation allows only constructors without required arguments to be used. Any class which requires passing arguments to constructor cannot be used in combination with object initializer. 
  
  
Line 134: Line 132:
  
  
-> Note! Classes without constructor desired to mimick "structs" or "data classes" are almost completely viable through the class with typed properties which means they rather don't need a constructor declared directly in the definition of class.+**Note!** Classes without constructor desired to mimick "structs" or "data classes" are almost completely viable through the class with typed properties which means they rather don't need a constructor declared directly in the definition of class.
  
-> Note! If a class needs validation upon to validate its invariants a proper validation logic needs to be called after initialization. To combine it with object initializer and keep the validation process encapsulated, instantiation and initialization of class state are possible in named constructor with validation invoke before the instance is being used.+**Note!** If a class needs validation upon to validate its invariants a proper validation logic needs to be called after initialization. To combine it with object initializer and keep the validation process encapsulated, instantiation and initialization of class state are possible in named constructor with validation invoke before the instance is being used.
  
 ==== Lexical scope ==== ==== Lexical scope ====
Line 307: Line 305:
 As this is a language change, a 2/3 majority is required. As this is a language change, a 2/3 majority is required.
  
-The vote is a straight Yes/No vote for accepting the RFC and merging the patch.+The vote is a straight Yes/No vote for accepting the RFC. 
 + 
 +<doodle title="Accept object initializer?" auth="brzuchal" voteType="single" closed="true"> 
 +   * Yes 
 +   * No 
 +</doodle> 
 +
 +<doodle title="Choose between two tokens as an assign operator in object initializer block?" auth="brzuchal" voteType="single" closed="true"> 
 +   * = 
 +   * => 
 +</doodle> 
  
 ===== Patches and Tests ===== ===== Patches and Tests =====
rfc/object-initializer.1568641707.txt.gz · Last modified: 2019/09/16 13:48 by brzuchal