rfc:class_and_interface_name_types
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
rfc:class_and_interface_name_types [2017/04/29 14:47] – expand ajf | rfc:class_and_interface_name_types [2017/09/22 13:28] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 16: | Line 16: | ||
- If the value is not a string, reject it. | - If the value is not a string, reject it. | ||
- If there is no currently-loaded class, interface, or trait with the name given by the value, attempt to autoload it. | - If there is no currently-loaded class, interface, or trait with the name given by the value, attempt to autoload it. | ||
- | - If there is now no currently-loaded class or interface | + | - If there is now no currently-loaded class or interface with the name given by the value, reject the value. |
- Otherwise, accept the value. | - Otherwise, accept the value. | ||
+ | |||
+ | As a parameter type, it would permit default values of < | ||
A simple example of usage: | A simple example of usage: | ||
Line 24: | Line 26: | ||
<?php | <?php | ||
- | function accepts_class(class $class) { | + | function accepts_class(class $class = stdClass::class) { |
var_dump($class); | var_dump($class); | ||
} | } | ||
- | accepts_class(stdClass:: | + | accepts_class(); |
- | accepts_class(" | + | accepts_class(stdClass:: |
- | accepts_class(ArrayAccess:: | + | accepts_class(" |
+ | accepts_class(ArrayAccess:: | ||
accepts_class(" | accepts_class(" | ||
</ | </ | ||
Line 46: | Line 49: | ||
* It resembles the < | * It resembles the < | ||
* It avoids the redundancy of saying " | * It avoids the redundancy of saying " | ||
- | * It aligns with how PHP treats class and its fully-qualified name the same in several places (e.g. < | + | * It aligns with how PHP treats |
However, there are also arguments in favour of '' | However, there are also arguments in favour of '' | ||
Line 61: | Line 64: | ||
* It limits the number of new types that are introduced (one versus two or three) | * It limits the number of new types that are introduced (one versus two or three) | ||
* It aligns with the internal '' | * It aligns with the internal '' | ||
+ | * It aligns with how < | ||
* Interfaces are essentially glorified abstract classes | * Interfaces are essentially glorified abstract classes | ||
* PHP internally represents interfaces as a kind of class | * PHP internally represents interfaces as a kind of class | ||
Line 72: | Line 76: | ||
* It might be surprising to see the name of an // | * It might be surprising to see the name of an // | ||
- | There is an advantages | + | There is an advantage |
- | If there was a separate < | + | If there was a separate < |
If none of these approaches are palatable, there could be a //third// type accepting both classes and interfaces, perhaps named '' | If none of these approaches are palatable, there could be a //third// type accepting both classes and interfaces, perhaps named '' | ||
Line 104: | Line 108: | ||
There is a patch here which contains tests: https:// | There is a patch here which contains tests: https:// | ||
- | It does not yet handle inheritance concerns. | + | The commits for versions with multiple new types do not handle inheritance concerns. |
There is not yet a pull request. | There is not yet a pull request. |
rfc/class_and_interface_name_types.1493477245.txt.gz · Last modified: 2017/09/22 13:28 (external edit)