rfc:consistent_callables

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:consistent_callables [2019/04/28 02:51] – Made scope of changes even smaller. danackrfc:consistent_callables [2021/10/20 13:18] (current) danack
Line 3: Line 3:
   * Date: 2019-04-28    * Date: 2019-04-28 
   * Author: Dan Ackroyd   * Author: Dan Ackroyd
-  * Status: Under Discussion +  * Status: Withdrawn
   * First Published at: https://wiki.php.net/rfc/consistent_callables   * First Published at: https://wiki.php.net/rfc/consistent_callables
  
Line 178: Line 178:
 // Fatal error: Uncaught TypeError: Argument 1 passed to Foo::process() must be  // Fatal error: Uncaught TypeError: Argument 1 passed to Foo::process() must be 
 // callable, string given, called in /in/7SCuB on line 34 and defined in /in/7SCuB:10 // callable, string given, called in /in/7SCuB on line 34 and defined in /in/7SCuB:10
-i.e. calling `self::hello` from within Bar changes the callable from meaning `Foo::hello` to `Bar::hello` and calling 'parent::hello' from within Foo changes the meaning from `Foo::hello` to something that breaks. 
  
 </code> </code>
 +
 +i.e. calling `self::hello` from within Bar changes the callable from meaning `Foo::hello` to `Bar::hello` and calling 'parent::hello' from within Foo changes the meaning from `Foo::hello` to something that breaks.
  
 === call_user_func different from is_callable ===  === call_user_func different from is_callable === 
Line 211: Line 212:
 // This is foo::bar // This is foo::bar
 // Fatal error: Uncaught Error: Class 'self' not found in /in/DDGHU:14 // Fatal error: Uncaught Error: Class 'self' not found in /in/DDGHU:14
-i.e. despite something being 'callable' it is only callable directly and not through call_user_func. 
  
 </code> </code>
 +
 +i.e. despite something being 'callable' it is only callable directly and not through call_user_func.
  
  
Line 224: Line 226:
   - A string that is the name of a function.   - A string that is the name of a function.
   - An array consisting of two elements; a string at index 0 which is a valid fully qualified class name, and a string at index 1 which must meet the conditions:   - An array consisting of two elements; a string at index 0 which is a valid fully qualified class name, and a string at index 1 which must meet the conditions:
-    * either be the name of a public static function of the class or the class must have a magic __callStatic method.+    * either be the name of a public static function of the class or the class must have a magic %%__callStatic%% method. 
 +    * the name must not be that of an instance method. 
 +  - An array consisting of two elements; an object at index 0, and a string at index 1 where either the string is the name of a public method of the object, or the object has a magic %%__call%% method. 
 +  - A string of the form `%CLASS_NAME%::%STATIC_METHOD_NAME%` where %CLASS_NAME% is fully qualified class name, and %STATIC_METHOD_NAME% which must meet the conditions: 
 +    * either be the name of a public static function of the class or the class must have a magic %%__callStatic%% method.
     * the name must not be that of an instance method.     * the name must not be that of an instance method.
-  - An array consisting of two elements; an object at index 0, and a string at index 1 where either the string is the name of a public method of the object, or the object has a magic __call method. 
   - An instance of a class (an object) where the class has a public __invoke() method.   - An instance of a class (an object) where the class has a public __invoke() method.
   - Closures, which includes anonymous functions.   - Closures, which includes anonymous functions.
 +
  
 Note - Does not affect calling private/protected methods in correct scope Note - Does not affect calling private/protected methods in correct scope
Line 253: Line 259:
 </code> </code>
  
-In this example, although `$fn` is not a callable that can be passed around to arbitrary scopes, it is valid to call it in the scope that it's in. call_user_func and $fn() will continue to check whether the variable passed in is callable in the current scope. i.e. with is_callable($fn, $syntaxOnly = false, $currentScope = true)+In this example, although `$fn` is not a callable that can be passed around to arbitrary scopes, it is valid to call it inside the class scope that it's in. 
  
 ==== The strings 'self', 'parent', and 'static' are no longer usable as part of a string callable ====  ==== The strings 'self', 'parent', and 'static' are no longer usable as part of a string callable ==== 
rfc/consistent_callables.1556419900.txt.gz · Last modified: 2019/04/28 02:51 by danack