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
>
>

Reply via email to