RE: [PHP-DEV] Patch: getters/setters syntax Implementation
| From: | Clint M Priest | Date: | Sun, 04 Dec 2011 14:09:18 +0000 |
| Subject: | RE: [PHP-DEV] Patch: getters/setters syntax Implementation | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-56760@lists.php.net to get a copy of this message | ||
Updated patch w/o white-space: http://www.clintpriest.com/patches/accessors_v1.patch
In the end it is a relatively simple patch. The new syntax effectively creates internal functions
on the object and the system looks for those functions and calls them at the appropriate time.
Example:
class z {
public $Hours {
public get { return $this->_Hours; }
protected set { $this->_Hours = $value; }
}
}
Defines:
$o->__getHours();
$o->__setHours($value);
Standard __get()/__set() functionality checks for the more specifically defined function name and
calls them. I thought this would make the most sense since it would allow us to leverage the
existing inheritance functionality. This comes out with respect to interfaces and traits in that
only errors had to be changed (for clarity) on interfaces and no changes to traits were necessary to
support the new functionality.
For the automatic get/set functionality, I essentially built the function body myself within
zend_do_end_accessor_declaration(). One point of contention here is that internally it defines a
__$Hours property which would be accessible from various points. I believe the standard C# get/set
does not allow any access to the underlying data storage. In order to accomplish that there would
need to be some non-standard storage or a super-private level or something. I did not explore that
possibility as of yet.
I did add a couple of convenience functions that may already be available in some other form I was
not aware of, such as strcatalloc or MAKE_ZNODE().
--Clint
-----Original Message-----
From: Pierre Joye [mailto:pierre.php@gmail.com]
Sent: Sunday, December 04, 2011 4:50 AM
To: Clint M Priest
Cc: internals@lists.php.net
Subject: Re: [PHP-DEV] Patch: getters/setters syntax Implementation
hi Clint!
Thanks for your work so far!
On Sun, Dec 4, 2011 at 1:33 AM, Clint M Priest <cpriest@zerocue.com> wrote:
> What are the next steps to get this added to some future release?
Let discuss the implementation and how it works, then you can move to the voting phase. There is no
need to hurry as the next release where this patch could go in is next year.
Cheers,
--
Pierre
@pierrejoye | http://blog.thepimp.net | http://www.libgd.org