rfc:propertygetsetsyntax

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
Last revisionBoth sides next revision
rfc:propertygetsetsyntax [2010/11/14 02:07] – Added a semicolon to the "alternative syntax", as suggested by Kalle Nielsen lieutenantclonerfc:propertygetsetsyntax [2011/12/22 15:18] – [Changelog] lieutenantclone
Line 199: Line 199:
  
 In this syntax, a semi-colon exists at the end of the property definition.  This was suggested by Kalle Nielsen, as it would be simpler to implement into the current implementation of class members in the PHP interpreter. In this syntax, a semi-colon exists at the end of the property definition.  This was suggested by Kalle Nielsen, as it would be simpler to implement into the current implementation of class members in the PHP interpreter.
 +
 +**__Alternative Syntax Suggested By jbondc__**
 +
 +<code php>
 +property Hours {
 + get { return $this->seconds / 3600; }
 + set { $this->seconds = $value * 3600; } // The variable $value holds the incoming value to be "set"
 +}
 +
 +class TimePeriod
 +{
 +    private $seconds;
 +
 +    public [Hours] $hours;
 +}
 +</code>
 +
 +This syntax would favor re-use similar to traits by injecting the set/get code.
 +
 +The implementation would add the keywords 'property', _PROPERTY_, the '[', ']' tokens and the 'readonly' property as part of Spl.
 +
 +A read-only property could be defined in the following ways:
 +
 +<code php>
 +// Spl property
 +property readonly  {
 +    final set { throw Exception(__PROPERTY__ . " is read-only."); }
 +}
 +
 +// Read-only property #1
 +property MyHours1 extends Hours  {
 +     use readonly;
 +}
 +
 +// Read-only property #2
 +property MyHours2 extends Hours  {
 + set { throw Exception(__PROPERTY__ . " is read-only."); }
 +}
 +
 +// Read-only property #3 (if you don't want an exception)
 +property MyHours3 extends Hours  {
 + set { trigger_error(__PROPERTY__ . " is read-only.", E_USER_ERROR); }
 +}
 +</code>
 +
 +Another approach, to reserve the '[', ']' tokens for annotations or something else could be:
 +
 +<code php>
 +// property as some kind of trait
 +class TimePeriod
 +{
 +    private $seconds;
 +
 +    public {use Hours;} $hours;
 +}
 +</code>
  
 ==== Read-Only And Write-Only Properties ==== ==== Read-Only And Write-Only Properties ====
Line 218: Line 274:
     public property Minutes     public property Minutes
     {     {
-        set { $this->minutes = $value * 60; }+        set { $this->seconds = $value * 60; }
     }     }
 }; };
Line 448: Line 504:
 echo TimePeriod::$Hours;// Outputs 12 echo TimePeriod::$Hours;// Outputs 12
 </code> </code>
 +
 +===== Implementation =====
 +
 +An implementation of this proposal is being worked on by Clint Priest <phpdev at zerocue dot com> Information about implementation details can be found here: https://wiki.php.net/rfc/propertygetsetsyntax-as-implemented
  
 ===== References ===== ===== References =====
Line 461: Line 521:
   * [[http://msdn.microsoft.com/en-us/library/x9fsa0sw%28VS.80%29.aspx|Properties (C# Programming Guide)]]   * [[http://msdn.microsoft.com/en-us/library/x9fsa0sw%28VS.80%29.aspx|Properties (C# Programming Guide)]]
   * [[http://msdn.microsoft.com/en-us/library/75e8y5dd%28VS.80%29.aspx|Asymmetric Accessor Accessibility (C# Programming Guide)]]   * [[http://msdn.microsoft.com/en-us/library/75e8y5dd%28VS.80%29.aspx|Asymmetric Accessor Accessibility (C# Programming Guide)]]
 +  * [[http://msdn.microsoft.com/en-us/library/ms229054.aspx|Choosing Between Properties and Methods (MSDN)]]
 +  * [[http://msdn.microsoft.com/en-us/library/ms229006.aspx|Property Design (MSDN)]]
 +  * [[http://c2.com/cgi/wiki?UniformAccessPrinciple|Uniform Access Principle (C2 wiki)]]
 +  * [[http://en.wikipedia.org/wiki/Uniform_access_principle|Uniform Access Principle (Wikipedia)]]
  
 ===== Changelog ===== ===== Changelog =====
Line 476: Line 540:
   - 2010-11-13 Dennis Robinson: Added a note below the basic syntax about new keywords being created.   - 2010-11-13 Dennis Robinson: Added a note below the basic syntax about new keywords being created.
   - 2010-11-13 Dennis Robinson: Added a semicolon to the "alternative syntax", as suggested by Kalle Nielsen.   - 2010-11-13 Dennis Robinson: Added a semicolon to the "alternative syntax", as suggested by Kalle Nielsen.
 +  - 2010-11-29 jbondc: Added another alternative syntax 
 +  - 2010-12-01 Dennis Robinson: Added additional links in the "Further Reading" section 
 +  - 2011-12-22 Dennis Robinson: Added "Implementation" section
rfc/propertygetsetsyntax.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1