rfc:to-array

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:to-array [2020/02/11 12:52] – Remove reference to print_r() casting to array stevenwadejrrfc:to-array [2020/02/11 13:57] (current) – Bump the version number now that it's under discussion and some feedback has been addressed stevenwadejr
Line 1: Line 1:
 ====== PHP RFC: __toArray() ====== ====== PHP RFC: __toArray() ======
-  * Version: 0.1+  * Version: 1.1
   * Date: 2019-08-28   * Date: 2019-08-28
   * Author: Steven Wade, stevenwadejr@gmail.com   * Author: Steven Wade, stevenwadejr@gmail.com
Line 48: Line 48:
  
 ==== What this is ==== ==== What this is ====
-The example above shows the method <nowiki>__toArray()</nowiki> used in a type-casting context.  This proposal would have objects implementing the <nowiki>__toArray()</nowiki> magic method called within //any// array context including type hinting and return types.+The example above shows the method <nowiki>__toArray()</nowiki> used in a type-casting context.  This proposal would have objects implementing the <nowiki>__toArray()</nowiki> magic method called within //any// array context including type hinting and return types (only when using weak typing - strong typing will throw an error).
  
 Similar to PHP's current implementation of <nowiki>__toString()</nowiki>, a copy of the given object's value as an array is made upon conversion. Similar to PHP's current implementation of <nowiki>__toString()</nowiki>, a copy of the given object's value as an array is made upon conversion.
Line 107: Line 107:
 ) )
 */ */
 +</code>
 +
 +=== Strict Types ===
 +
 +Automatic casting will not work when using strict types.
 +
 +<code php>
 +declare(strict_types=1);
 +
 +function bar(Person $person): array {
 +    return $person;
 +}
 +
 +bar($person); // Throws an error: "Return value of bar() must be of the type array, object returned"
 +
 +function foo(array $person) {
 +    var_dump($person);
 +}
 +
 +foo($person); // Throws an error: "Argument 1 passed to foo() must be of the type array, object given"
 +</code>
 +
 +Manual casting within strict types will continue to work and is allowed.
 +
 +<code php>
 +declare(strict_types=1);
 +
 +function bar(Person $person): array {
 +    return (array) $person;
 +}
 +
 +bar($person); // Returns an array
 +
 +function foo(array $person) {
 +    var_dump($person);
 +}
 +
 +foo((array) $person); // Allowed
 </code> </code>
  
Line 115: Line 153:
  
 ===== Backward Incompatible Changes ===== ===== Backward Incompatible Changes =====
-:?: Help needed+None
  
 ===== Proposed PHP Version(s) ===== ===== Proposed PHP Version(s) =====
rfc/to-array.txt · Last modified: 2020/02/11 13:57 by stevenwadejr