Hi! would it be possible to add a second shorthand syntax to the complete automatic implementation?
Examples: class TimePeriod { public $Hours {}; public property $Hours; public $Hours {property}; } That could save quite some typing. Overall, i really like it. On Tue, Apr 24, 2012 at 2:56 PM, Anthony Ferrara <ircmax...@gmail.com>wrote: > Clint, > > Very nice job overall! Looking quite good. > > > Alternatively we could throw an error to a call on isset and/or unset > against a property which didn't define an implementation. > > I don't care for that concept much. All it's doing is trading one set > of boilerplate for another. I'd prefer the get() !== null approach, > since there is a zval allocated for it, so the isset() part. > > And I do like the unset overloading, which is right inline with > __unset()... > > Additionally, is something like this possible? > > class Foo { > private $bar = 1; > public $bar { > get { return $this->bar; } > set { $this->bar = (int) $value; } > } > } > > The reason that I ask, is that's kind of what's done with __get() and > __set() right now, the magic is called when it's out of scope. So in > this case, we can have a public variable with the same name as the > private one, but with validations attached to the public exposure... > > Just a thought... > > Anthony > > On Tue, Apr 24, 2012 at 8:31 AM, Clint M Priest <cpri...@zerocue.com> > wrote: > > I've updated the RFC to include details on adding isset/unset as well as > references, detailed below: > > > > isset/unset: > > > > class TimePeriod { > > private $Seconds = 3600; > > > > public $Hours { > > get { return $this->Seconds / 3600; } > > set { $this->Seconds = $value; } > > isset { return !is_null($this->Seconds); } > > unset { $this->Seconds = NULL; } > > } > > } > > > > References: > > > > > > class SampleClass { > > > > private $_dataArray = array(1,2,5,3); > > > > > > > > public $dataArray { > > > > &get { return &$this->_dataArray; } > > > > } > > > > } > > > > > > > > $o = new SampleClass(); > > > > sort($o->dataArray); > > > > /* $o->dataArray == array(1,2,3,5); */ > > > > Comments? > > > > These would also include automatic implementations which call the > respective functions on the backing field. I could see only allowing > isset/unset automatic implementations if get/set were also specified as > automatic implementations. > > > > Default implementations of isset/unset > > > > I'm also fielding comments/ideas on a way to always provide automatic > implementations of isset/unset for any accessor that didn't define one > automatically. One idea was for the isset (unspecified implementation) > which would return true if the getter provided any value which evaluated to > true, such as this: > > > > class TimePeriod { > > private $Seconds = 3600; > > > > public $Hours { > > get { return $this->Seconds / 3600; } > > set { $this->Seconds = $value; } > > } > > } > > /* Default Implementation Concept */ > > > > isset { return (int)$this->Hours; } > > unset { $this->Hours = NULL; } > > > > Note that the automatic implementation of unset is not strictly the same > as an unset() but without any sort of unset implementation a call to > unset() would do nothing. Alternatively we could throw an error to a call > on isset and/or unset against a property which didn't define an > implementation. > > > > Thoughts? > > > > -Clint > > -- > PHP Internals - PHP Runtime Development Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php > >