rfc:closures

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
Next revisionBoth sides next revision
rfc:closures [2008/08/11 19:06] – Documented additional reflection improvements (see php-internals) chris_serfc:closures [2009/03/17 14:27] – Note $this isn't available any more scottmac
Line 3: Line 3:
   * Date: 2008-07-01   * Date: 2008-07-01
   * Author: Christian Seiler <chris_se@gmx.net>, Dmitry Stogov <dmitry@zend.com>   * Author: Christian Seiler <chris_se@gmx.net>, Dmitry Stogov <dmitry@zend.com>
-  * Status: Accepted+  * Status: Implemented
  
 This RFC discusses the introduction of compile-time lambda functions and closures in PHP. This RFC discusses the introduction of compile-time lambda functions and closures in PHP.
Line 61: Line 61:
  
 The following proposal and patch implement compile-time lambda functions and closures for PHP while keeping the patch as simple as possible. The following proposal and patch implement compile-time lambda functions and closures for PHP while keeping the patch as simple as possible.
- 
 ==== Userland perspective ==== ==== Userland perspective ====
  
Line 97: Line 96:
      return preg_replace_callback ('/( +) /', $replacement, $text);      return preg_replace_callback ('/( +) /', $replacement, $text);
    }    }
 +</code>
 +
 +You can even put the lambda function inline, for example:
 +
 +<code php>
 +  function replace_spaces ($text) {
 +    return preg_replace_callback ('/( +) /',
 +      function ($matches) {
 +        return str_replace ($matches[1], ' ', '&nbsp;').' ';
 +      }, $text);
 +  }
 </code> </code>
  
Line 162: Line 172:
  
 === Interaction with OOP === === Interaction with OOP ===
 +
 +$this support has been removed, see [[rfc/closures/removal-of-this|removal of this]]
  
 If a closure is defined inside an object, the closure has full access to the current object through $this (without the need to import it explicitly) and all private and protected methods of that class. This also applies to nested closures. Example: If a closure is defined inside an object, the closure has full access to the current object through $this (without the need to import it explicitly) and all private and protected methods of that class. This also applies to nested closures. Example:
Line 208: Line 220:
  
 In this case, $this is not available inside the closure. This may save a lot of memory if saves many closures that originated in longer needed objects. In this case, $this is not available inside the closure. This may save a lot of memory if saves many closures that originated in longer needed objects.
 +
  
 ==== Additional goody: _ _invoke ==== ==== Additional goody: _ _invoke ====
Line 362: Line 375:
    * 2008-06-16 Christian Seiler: Small changes    * 2008-06-16 Christian Seiler: Small changes
    * 2008-06-16 Christian Seiler: Initial creation    * 2008-06-16 Christian Seiler: Initial creation
- 
rfc/closures.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1