rfc:traits
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
rfc:traits [2008/03/06 21:19] – gron | rfc:traits [2012/01/30 08:27] – Make the outdated note bold, and move it away from the headline where it keeps being unnoticed gron | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Request for Comments: Traits for PHP ====== | + | ====== Request for Comments: Traits for PHP (Superseded by Horizontal Reuse for PHP) ====== |
* Version: 1.5 | * Version: 1.5 | ||
+ | * Date: 2008-03-06 | ||
+ | * Author: Stefan Marr < | ||
+ | * Status: **Superseded by [[rfc: | ||
+ | * Patch: http:// | ||
* First Published at: http:// | * First Published at: http:// | ||
* reST TXT: http:// | * reST TXT: http:// | ||
- | * Author: Stefan Marr < | ||
This RFC will discuss at first the motivation for Traits describing the rationals | This RFC will discuss at first the motivation for Traits describing the rationals | ||
Line 11: | Line 15: | ||
additional resources about Traits are given. | additional resources about Traits are given. | ||
+ | **This RFC is outdated and replaced by [[rfc: | ||
===== Introduction ===== | ===== Introduction ===== | ||
Line 260: | Line 265: | ||
class Talker { | class Talker { | ||
use A, B { | use A, B { | ||
- | | + | |
- | | + | |
} | } | ||
} | } | ||
Line 276: | Line 281: | ||
class Talker { | class Talker { | ||
use A, B { | use A, B { | ||
- | | + | |
- | | + | |
- | | + | |
} | } | ||
} | } | ||
Line 499: | Line 504: | ||
This section collects proposals for alternative Traits syntaxes. | This section collects proposals for alternative Traits syntaxes. | ||
+ | |||
+ | ==== Scala Synthax and practical example ==== | ||
+ | |||
+ | This is inpired from [[http:// | ||
+ | |||
+ | <code php> | ||
+ | trait User_Comments | ||
+ | { | ||
+ | | ||
+ | { | ||
+ | $db = App:: | ||
+ | | ||
+ | } | ||
+ | |||
+ | | ||
+ | { | ||
+ | | ||
+ | } | ||
+ | |||
+ | | ||
+ | { | ||
+ | $db = App:: | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | |||
+ | class App_Email with User_Comments {} | ||
+ | |||
+ | class App_Document with User_Comments | ||
+ | |||
+ | | ||
+ | { | ||
+ | $db = App:: | ||
+ | | ||
+ | |||
+ | | ||
+ | } | ||
+ | } | ||
+ | // PHP notice : ' | ||
+ | |||
+ | $doc = new App_Document; | ||
+ | |||
+ | echo is_a($doc, ' | ||
+ | echo is_a($doc, ' | ||
+ | echo is_with($doc, | ||
+ | </ | ||
+ | |||
+ | We deal with conflicting class definitions by simply ignoring them. | ||
+ | |||
+ | <code php> | ||
+ | trait Conflict_Comments | ||
+ | { | ||
+ | | ||
+ | { | ||
+ | | ||
+ | } | ||
+ | } | ||
+ | |||
+ | class App_Document_Conflict with User_Comments, | ||
+ | |||
+ | | ||
+ | { | ||
+ | $db = App:: | ||
+ | | ||
+ | |||
+ | | ||
+ | } | ||
+ | } | ||
+ | // PHP notice : ' | ||
+ | // PHP notice : ' | ||
+ | |||
+ | $doc = new App_Document_Conflict; | ||
+ | |||
+ | echo is_a($doc, ' | ||
+ | echo is_with($doc, | ||
+ | echo is_with($doc, | ||
+ | </ | ||
=== Alternative Keywords for use === | === Alternative Keywords for use === |
rfc/traits.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1