rfc:forbid_null_this_in_methods

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:forbid_null_this_in_methods [2016/04/29 16:09] nikicrfc:forbid_null_this_in_methods [2017/09/22 13:28] (current) – external edit 127.0.0.1
Line 3: Line 3:
   * Date: 2016-04-29   * Date: 2016-04-29
   * Author: Nikita Popov <nikic@php.net>   * Author: Nikita Popov <nikic@php.net>
-  * Status: Draft+  * Status: Withdrawn
   * Target version: PHP 7.1   * Target version: PHP 7.1
   * Patch: https://github.com/php/php-src/pull/1894   * Patch: https://github.com/php/php-src/pull/1894
Line 40: Line 40:
 </code> </code>
  
-The goal of this RFC is to tighten guarantees that any reasonable person is expecting anyway, removing one of our largest remaining type-system loopholes. This RFC will ensure that within a non-static method the assertion ''$this instanceof self'' never fails. Furthermore this eliminates a large number of runtime checks and paves the way for future optimization (like method inlining).+The goal of this RFC is to tighten guarantees that any reasonable person is expecting anyway, removing one of our largest remaining type-system loopholes. This RFC will ensure that within a non-static method the assertion ''$this instanceof self'' never fails. Furthermore this eliminates a number of hot runtime checks and paves the way for future optimization (like method inlining).
  
 ===== Proposal ===== ===== Proposal =====
Line 92: Line 92:
 This behavior is similar to many other existing restrictions that can be circumvented using variable-variables. For example assignments to ''$this'' are prohibited at compile-time, but this restriction can also be avoided using variable-variables. This behavior is similar to many other existing restrictions that can be circumvented using variable-variables. For example assignments to ''$this'' are prohibited at compile-time, but this restriction can also be avoided using variable-variables.
  
-The following ''parent::method()'' call is allowed, because this is not static call, but rather scoped instance callIt will have a valid ''$this'' (namely of class ''B'' or a child class):+The following ''parent::method()'' and ''A::method()'' calls are allowed, because they are not static calls, but rather scoped instance callsThey will have a valid ''$this'' (namely of class ''B'' or a child class):
  
 <code php> <code php>
Line 104: Line 104:
  // This call is allowed, because it's not a static call (it only looks like one)  // This call is allowed, because it's not a static call (it only looks like one)
  parent::method();  parent::method();
 + // This call is also allowed, for the same reason
 + A::method();
  }  }
 } }
Line 168: Line 170:
  
 This pattern will no longer be supported. (Actually it's still possible to do this using variable-variables for people with strong masochistic tendencies.) This pattern will no longer be supported. (Actually it's still possible to do this using variable-variables for people with strong masochistic tendencies.)
- 
-HHVM already forbids ''$this'' from being NULL in non-static methods. This implies that a wide range of major libraries and frameworks are certainly compatible with this behavior. 
  
 ===== Future Scope ===== ===== Future Scope =====
rfc/forbid_null_this_in_methods.1461946156.txt.gz · Last modified: 2017/09/22 13:28 (external edit)