rfc:class-like_primitive_types

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revisionBoth sides next revision
rfc:class-like_primitive_types [2016/12/19 21:23] – plural ajfrfc:class-like_primitive_types [2016/12/19 21:52] ajf
Line 62: Line 62:
   * <php>gettype()</php> will continue to report the other primitive types as non-objects   * <php>gettype()</php> will continue to report the other primitive types as non-objects
   * <php>ArrayAccess</php> will not be implemented by <php>array</php>, because it provides mutating methods   * <php>ArrayAccess</php> will not be implemented by <php>array</php>, because it provides mutating methods
 +  * <php>null</php> has no shadow class (see the Open Issues section), but does support <php>instanceof null</php>
  
 **FIXME:** What do I do about reflection? **FIXME:** What do I do about reflection?
 +
 +=== Serializable and resources ===
 +
 +The resource type will not implement the <php>Serializable</php> interface. Though the <php>serialize()</php> function accepts resources, it is broken: they serialise to an integer of the resource ID, and this integer, when deserialised, neither become a resource nor is usable as one. The <php>->deserialize()</php> method would therefore be redundant given resources cannot be deserialised, and the type would not be fulfilling the contract of the interface since resources do not meaningfully/ serialise.
  
 ==== Primitive type class hierarchy ==== ==== Primitive type class hierarchy ====
Line 70: Line 75:
  
 <code php> <code php>
-final class null implements Serializable, JsonSerializable { +/* There is no shadow class for null */ 
-    public function __toString() { /* ... */ } +
-    public function serialize() { /* ... */ } +
-    public function unserialize($serialized) { /* ... */ } +
-    public function jsonSerialize() { /* ... */ } +
-}+
 final class bool implements Serializable, JsonSerializable { final class bool implements Serializable, JsonSerializable {
     public function __toString() { /* ... */ }     public function __toString() { /* ... */ }
Line 110: Line 111:
     }     }
 } }
-final class resource implements Serializable {+final class resource {
     public function __toString() { /* ... */ }     public function __toString() { /* ... */ }
-    public function serialize() { /* ... */ } 
-    public function unserialize($serialized) { /* ... */ } 
 } }
 </code> </code>
Line 132: Line 131:
 ==== To Existing Extensions ==== ==== To Existing Extensions ====
  
-This does not impact existing extensionstheir view of the world is unchanged and the other primitive types are still primitives.+This does not impact existing extensionstheir view of the world is unchanged and the primitive types other than objects are still not objects, internally.
  
 **FIXME:** Reflection. **FIXME:** Reflection.
Line 143: Line 142:
  
 **FIXME:** Reflection, Opcache. **FIXME:** Reflection, Opcache.
 +
 +==== Should null have a shadow class? ====
 +
 +Or in other words, should these features be extended to <php>null</php>?
 +
 +<php>null</php> is a value and type representing the absence of a value. It is a special case among the scalar types, lacking its own type declaration and not being coerced in weak type checking.
 +
 +Would methods like <php>__toString()</php> on <php>null</php> values be more likely to be called in error than intentionally?
 +
 +In JavaScript, ''null'' does not have any properties or methods, but ''true'' and ''false'' do. In contrast, Python's ''None'' (its equivalent to null) //does// have properties and methods, albeit only magic methods.
 +
 +This RFC currently chooses to omit null from support by most of these features.
 +
 +==== Should resource have a shadow class? ====
 +
 +Resource is a legacy type that could be wholly replaced by objects in future. Extending these features to this type would be further entrenching it and contrary to the goal of its removal.
  
 ===== Unaffected PHP Functionality ===== ===== Unaffected PHP Functionality =====
rfc/class-like_primitive_types.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1