Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-30 Thread Clint Priest

On 1/17/2013 12:20 PM, Clint Priest wrote:
I'm happy to say that Property Accessors is ready for a vote for 
inclusion in 5.5 release.


Nikita and I (as well as Stas a bit) have all been working hard to 
make this happen for 5.5, voting and the specifications are here:


https://wiki.php.net/rfc/propertygetsetsyntax-v1.2#voting

Thanks,

-Clint


Voting has been closed, proposal declined.  34 to 22.

--
-Clint

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-23 Thread Mark
On Wed, Jan 23, 2013 at 2:28 AM, Anthony Ferrara ircmax...@gmail.com wrote:
 Rasmus,

 Now do 5 or even 10+ years and commits to Zend and APC. We are talking
 about a core language feature here, so commits to the code most affected
 is what you should be looking at and when I talk about maintenance I
 talk about code we are fixing 10 years from now. Commits in the past
 year doesn't really reflect that very well.


 True, but if someone hasn't been active with even a single commit in the
 past year, I don't think they should be counted as an active maintainer.

 I ran the numbers back to 2011. And they actually shift more towards Yes:
 Total Commits:
 No: 2011
 Yes: 1877

 All but top 2:
 No: 996
 Yes: 1011

 And for 2010 (past 3 years):
 No: 2455
 Yes: 2395

 All but top 2:
 No: 1440
 Yes: 1028

 This is pointless though. The point is pretty well proven that within
 reason the activity level of both groups is about even.

 And when measuring a feature against number of maintainers, I honestly
 believe that only current active maintainers should count for that ranking.
 It's not about discrediting prior contributors. Not in the least. I'm not
 suggesting their votes should count less. I'm not suggesting that they
 should lose voting rights or anything like that. But to count active
 maintainers against a list which contains people who's last commit was in
 2006 isn't fair.

 Anthony

Why are you people so conservative in adding this feature? The vote
was going very well, but right now i really doubt this will make it in
PHP 5.5...
I would like to see this feature get in. So please, be a bit less conservative.

If there is so much conservatism then please make a userland poll
perhaps on php.net to ask the php devs (from userland) if they'd like
this feature.

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-23 Thread Pierre Joye
hi Rasmus,

On Tue, Jan 22, 2013 at 6:20 PM, Rasmus Lerdorf ras...@lerdorf.com wrote:

 The simple explanation from me is that the ROI isn't there on this one.
 It adds a lot of code complexity for very little return. Yes, it saves a
 couple of lines of boilerplate code for a few people, but the cost is
 high in terms of ongoing maintenance and potential issues for opcode
 caches as well. If you look at the split in voting you will notice it is
 pretty much split along the lines of the people who have to maintain
 this code vs. the people who would like a shiny new feature.

With all respects, this has nothing to do with a shiny new feature.

The opcode cache support is actually a problem, I'd to agree. While we
(my team and I) do more maintenance around the opcode area with APC
(read: not the opcode related area per itself, not enough time sadly),
I cannot buy your argument. This feature has been requested since
years, by many major projects, same for other long awaited features
like annotations. We simply can't keep ignoring these requests, that's
what kill us.

About opcode cache complexity, I think apc per se is full of things we
should simplify or drop as features to make the code base much smaller
and much easier to test and valid, we have discussed that already and
we disagreed. But this is a topic I really want to bring on the table
before we even consider bringing it in core (see other requests about
that).

Cheers,
--
Pierre

@pierrejoye

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-23 Thread Rasmus Lerdorf
On 01/23/2013 01:15 AM, Pierre Joye wrote:

 About opcode cache complexity, I think apc per se is full of things we
 should simplify or drop as features to make the code base much smaller
 and much easier to test and valid, we have discussed that already and
 we disagreed. But this is a topic I really want to bring on the table
 before we even consider bringing it in core (see other requests about
 that).

You completely changed the subject. I made no mention of opcode cache
complexity.

As far as I am concerned, the way to handle opcode cache simplification
is to attack it from both ends. A lot of the tricks that need to be done
in APC are because the compiler isn't really geared towards opcode
caching. To really simplify APC we need to simplify the compiler and
obviously make the corresponding changes to the executor. The things you
want to remove from APC are superficial things and are not the root
cause of the complexity. Things like the compiler spitting out
context-sensitive op_arrays (see the MAKE_NOP() tricks in
zend_compile.c) really make life difficult for an opcode cache.

But yes, I completely agree that this is a much more interesting problem
that I think we should be working on rather than more OO candy.

-Rasmus

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-23 Thread Benjamin Eberlei
On Tue, Jan 22, 2013 at 6:20 PM, Rasmus Lerdorf ras...@lerdorf.com wrote:

 On 01/22/2013 03:18 AM, Clint Priest wrote:
 
  On 1/17/2013 12:20 PM, Clint Priest wrote:
  I'm happy to say that Property Accessors is ready for a vote for
  inclusion in 5.5 release.
 
  Nikita and I (as well as Stas a bit) have all been working hard to
  make this happen for 5.5, voting and the specifications are here:
 
  https://wiki.php.net/rfc/propertygetsetsyntax-v1.2#voting
 
 
  For those that have voted against this proposal, are there any
  clarifications that can be made or questions answered?
 
  There seems to be a lot of userland support for this proposal from
  people who don't have voting rights.

 The simple explanation from me is that the ROI isn't there on this one.
 It adds a lot of code complexity for very little return. Yes, it saves a
 couple of lines of boilerplate code for a few people, but the cost is
 high in terms of ongoing maintenance and potential issues for opcode
 caches as well. If you look at the split in voting you will notice it is
 pretty much split along the lines of the people who have to maintain
 this code vs. the people who would like a shiny new feature.


I think it would be important to gather the reasons for the No Votes and
ways how to address this problems.
Some from the previous discusisons are:

* Neglected APC support
* adding complexity to PHP Core
* Reference Handling
* Visibility Rules
* Fear of testing in production

And come up with solutions to those (like cutting some features, or putting
the code into 5.6 to allow for more testing)

Since several contributors helped with the development and committed
themselves for quite some time already, then if there were a chance to
address all the concerns then this feature could still move forward (maybe
at a later point)?



 -Rasmus


 --
 PHP Internals - PHP Runtime Development Mailing List
 To unsubscribe, visit: http://www.php.net/unsub.php




Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-23 Thread Ferenc Kovacs
On Wed, Jan 23, 2013 at 12:11 PM, Benjamin Eberlei kont...@beberlei.dewrote:

 On Tue, Jan 22, 2013 at 6:20 PM, Rasmus Lerdorf ras...@lerdorf.com
 wrote:

  On 01/22/2013 03:18 AM, Clint Priest wrote:
  
   On 1/17/2013 12:20 PM, Clint Priest wrote:
   I'm happy to say that Property Accessors is ready for a vote for
   inclusion in 5.5 release.
  
   Nikita and I (as well as Stas a bit) have all been working hard to
   make this happen for 5.5, voting and the specifications are here:
  
   https://wiki.php.net/rfc/propertygetsetsyntax-v1.2#voting
  
  
   For those that have voted against this proposal, are there any
   clarifications that can be made or questions answered?
  
   There seems to be a lot of userland support for this proposal from
   people who don't have voting rights.
 
  The simple explanation from me is that the ROI isn't there on this one.
  It adds a lot of code complexity for very little return. Yes, it saves a
  couple of lines of boilerplate code for a few people, but the cost is
  high in terms of ongoing maintenance and potential issues for opcode
  caches as well. If you look at the split in voting you will notice it is
  pretty much split along the lines of the people who have to maintain
  this code vs. the people who would like a shiny new feature.
 

 I think it would be important to gather the reasons for the No Votes and
 ways how to address this problems.
 Some from the previous discusisons are:

 * Neglected APC support
 * adding complexity to PHP Core
 * Reference Handling
 * Visibility Rules
 * Fear of testing in production

 And come up with solutions to those (like cutting some features, or putting
 the code into 5.6 to allow for more testing)

 Since several contributors helped with the development and committed
 themselves for quite some time already, then if there were a chance to
 address all the concerns then this feature could still move forward (maybe
 at a later point)?


Hi,

for the record I'm one of the people who thinks that this is a good idea
and the implementation improved a bunch from the previous
versions/proposals, but I think that there were too many changes which
could have introduced new bugs (both in design and implementation).
Accepting this feature just before the feature freeze would either prolong
the 5.5 release or we could end up in the same spot as with 5.4, where
major problems with the new features were discovered after the release plus
some of the must-have extensions wasn't ready to work with the new version.
I don't wanna hijack the discussion, but I think there are a couple of
concerns raised here would worth a separate discussion and possibly changes
in our rfc and release process.

-- 
Ferenc Kovács
@Tyr43l - http://tyrael.hu


Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-23 Thread Nikita Popov
On Tue, Jan 22, 2013 at 6:20 PM, Rasmus Lerdorf ras...@lerdorf.com wrote:

 On 01/22/2013 03:18 AM, Clint Priest wrote:
 
  On 1/17/2013 12:20 PM, Clint Priest wrote:
  I'm happy to say that Property Accessors is ready for a vote for
  inclusion in 5.5 release.
 
  Nikita and I (as well as Stas a bit) have all been working hard to
  make this happen for 5.5, voting and the specifications are here:
 
  https://wiki.php.net/rfc/propertygetsetsyntax-v1.2#voting
 
 
  For those that have voted against this proposal, are there any
  clarifications that can be made or questions answered?
 
  There seems to be a lot of userland support for this proposal from
  people who don't have voting rights.

 The simple explanation from me is that the ROI isn't there on this one.
 It adds a lot of code complexity for very little return. Yes, it saves a
 couple of lines of boilerplate code for a few people, but the cost is
 high in terms of ongoing maintenance and potential issues for opcode
 caches as well. If you look at the split in voting you will notice it is
 pretty much split along the lines of the people who have to maintain
 this code vs. the people who would like a shiny new feature.


Rasmus, could you maybe point out more specifically what issues you see
with the implementation (this also applies to all the other people who
voted no due to maintenance concerns)? It doesn't look like the RFC will
make it this time around, but it would be nice to know what issues there
are for next time. (If someone wants to give inline-comments on the
implementation, here's the PR: https://github.com/php/php-src/pull/263)

Thanks,
Nikita


Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-23 Thread Sherif Ramadan
On Tue, Jan 22, 2013 at 6:18 AM, Clint Priest cpri...@zerocue.com wrote:


 On 1/17/2013 12:20 PM, Clint Priest wrote:

 I'm happy to say that Property Accessors is ready for a vote for
 inclusion in 5.5 release.

 Nikita and I (as well as Stas a bit) have all been working hard to make
 this happen for 5.5, voting and the specifications are here:

 https://wiki.php.net/rfc/**propertygetsetsyntax-v1.2#**votinghttps://wiki.php.net/rfc/propertygetsetsyntax-v1.2#voting


 For those that have voted against this proposal, are there any
 clarifications that can be made or questions answered?

 There seems to be a lot of userland support for this proposal from people
 who don't have voting rights.




I just wanted to add my two cents here on top of what has already been
mentioned about added complexity with minimal benefit (which I mostly agree
with).

For me, the proposal sounded intriguing from the start, but I noticed a lot
of discussion around this RFC early on. This led me to believe that it was
going to be a popular feature, which I believe it is. Unfortunately, the
discussion seemed to grow so quickly that I could not find the time to
follow it all. The discussion also seemed to be torn into a hundred
different directions at once. Mostly just the regular internals noise that
I'm used to, but with a few moments of confusion on implementation.

I didn't really get it when it was being discussed. I was actually kind of
confused about what exactly was being proposed and I saw lots of changes in
the RFC and then the newly added RFC that was supposed to be a compliment
to this one. After seeing the patch and getting a chance to test it out,
though, I realized that the feature seems really confusing in terms of
behavior. It felt like a lot was being added, but in reality it was just a
lot of code complexity, not a lot of functionality.

Don't get me wrong, I liked it, but I also disliked the fact that it
introduces language changes that aren't easy to grasp or document. To me
this means we've borderline changed the behavior of a property (which most
PHP users currently understand to be a variable) into potential methods.
This is basically saying we can now completely change the behavior of a
property from a storage unit to a functional unit. That's a bit of a scary
thought to me, because it makes me question everything I know about
properties in PHP.

I think you did a wonderful job on this RFC and the code, as well as
everyone involved. Clearly, there is a demand for this. However, I'm not
sure I would feel comfortable seeing the after effects of this feature in
PHP. For what it's worth, this was not an easy vote for me. I debated it
for several days before I made my decision and I tried to be as objective
as possible. I just couldn't bring myself to vote it in for 5.5.



 --
 -Clint

 --
 PHP Internals - PHP Runtime Development Mailing List
 To unsubscribe, visit: http://www.php.net/unsub.php




Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-23 Thread Anthony Ferrara
Sherif,


Don't get me wrong, I liked it, but I also disliked the fact that it
 introduces language changes that aren't easy to grasp or document. To me
 this means we've borderline changed the behavior of a property (which most
 PHP users currently understand to be a variable) into potential methods.
 This is basically saying we can now completely change the behavior of a
 property from a storage unit to a functional unit. That's a bit of a scary
 thought to me, because it makes me question everything I know about
 properties in PHP.


Except that everything that's proposed here is possible today with __get,
__set, __isset and __unset. So already today you can't assume that a
property is a variable. In fact, you could build something like this
using __get, etc extremely dirty:

class Foo {
public function __get($name) {
$method = 'get' . ucfirst($name);
if (method_exists($this, $method)) {
return $this-method();
}
return $this-$name; // public properties
}
public function __set($name, $value) {
$method = 'set' . ucfirst($name);
if (method_exists($this, $method)) {
return $this-method($value);
}
return $this-$name = $value; // public properties
}
}

The difference in functionality that this provides is the ability to
custom-scope getters and setters. And it's a LOT cleaner...

Anthony


Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-23 Thread Sherif Ramadan
On Wed, Jan 23, 2013 at 9:03 AM, Anthony Ferrara ircmax...@gmail.comwrote:

 Sherif,


 Don't get me wrong, I liked it, but I also disliked the fact that it
 introduces language changes that aren't easy to grasp or document. To me
 this means we've borderline changed the behavior of a property (which most
 PHP users currently understand to be a variable) into potential methods.
 This is basically saying we can now completely change the behavior of a
 property from a storage unit to a functional unit. That's a bit of a scary
 thought to me, because it makes me question everything I know about
 properties in PHP.


 Except that everything that's proposed here is possible today with __get,
 __set, __isset and __unset. So already today you can't assume that a
 property is a variable. In fact, you could build something like this
 using __get, etc extremely dirty:

 class Foo {
 public function __get($name) {
 $method = 'get' . ucfirst($name);
 if (method_exists($this, $method)) {
 return $this-method();
 }
 return $this-$name; // public properties
 }
 public function __set($name, $value) {
 $method = 'set' . ucfirst($name);
 if (method_exists($this, $method)) {
 return $this-method($value);
 }
 return $this-$name = $value; // public properties
 }
 }

 The difference in functionality that this provides is the ability to
 custom-scope getters and setters. And it's a LOT cleaner...


This is not true. Magic getters and setters make a distinction that
accessors do not. That distinction is that they can only work on
inaccessible properties. Accessors offer no such distinction. They are
explicitly defined and as such their properties are not magical even though
they provide somewhat magical characteristics.

When you use var_dump to debug the property of an object, or the object
itself, for example, you would expect that whatever value is returned for
that property is either stored in memory somewhere or is the result of a
magic getter. Now, if it is the result of a magic getter there is no
confusion between whether this is an actual property or magic getter,
because a look at var_dump of that object tells us the whole story.

With accessors you now make the case that the property can be the result of
any computation and as such var_dump only reveals the underlying storage
unit and has no awareness of any computation.

class foo {
public $bar {
get() { return 'baz'; }
}
}

var_dump(json_encode(new foo),new foo, (new foo)-bar);

// gives us
string(12) {bar:null}
object(foo)#1 (1) {
  [bar]=
  NULL
}
string(3) baz


There's a subtle difference here that's not obvious at first. The
difference is that we have no way of knowing whether bar is the result of
an accessor or a an actual property without closely examining the code.
There's no easy way to debug who went wrong when this causes a problem. If
the property is now acting as a method we have to start treating it like a
method in order to debug it. That could mean backtraces, exception
handling, and a variety of other things that I really find weird to have to
do with an a property.


Now, let's examine the alternative. Using magic methods...

class foo {
private $bar;
public function __get($name) {
if ($name == 'bar') {
return 'baz';
}
}
}

var_dump(json_encode(new foo),new foo, (new foo)-bar);

string(2) {}
object(foo)#1 (1) {
  [bar:foo:private]=
  NULL
}
string(3) baz


At least here we know that bar is undoubtedly a private property so
whatever we got from (new foo)-bar must be the result of a magic getter.
There's only one place to look for that (in the magic method). With an
accessor I could easily create a situation where a bug manifests itself
anywhere in the code and not necessarily in the accessor itself that
accessor effectively becomes a method that does computation rather than
handling mere storage and retrieval.

I really really feel this is a way to give users lots of rope to hang
themselves with and at the cost of added complexity. I'm just not sure I
buy it. Sorry.


Sherif,
Arbiter of null.


 Anthony



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-23 Thread Clint Priest


On 1/23/2013 8:31 AM, Sherif Ramadan wrote:

Except that everything that's proposed here is possible today with __get,
__set, __isset and __unset. So already today you can't assume that a
property is a variable. In fact, you could build something like this
using __get, etc extremely dirty:

class Foo {
 public function __get($name) {
 $method = 'get' . ucfirst($name);
 if (method_exists($this, $method)) {
 return $this-method();
 }
 return $this-$name; // public properties
 }
 public function __set($name, $value) {
 $method = 'set' . ucfirst($name);
 if (method_exists($this, $method)) {
 return $this-method($value);
 }
 return $this-$name = $value; // public properties
 }
}

The difference in functionality that this provides is the ability to
custom-scope getters and setters. And it's a LOT cleaner...
Just a reminder on that cleanliness... Symfony: 3,805 functions that are 
getters or setters, Zend Framework: 4,080 functions that are getters or 
setters, not even counting what is being done with __get().

This is not true. Magic getters and setters make a distinction that
accessors do not. That distinction is that they can only work on
inaccessible properties. Accessors offer no such distinction. They are
explicitly defined and as such their properties are not magical even though
they provide somewhat magical characteristics.

When you use var_dump to debug the property of an object, or the object
itself, for example, you would expect that whatever value is returned for
that property is either stored in memory somewhere or is the result of a
magic getter. Now, if it is the result of a magic getter there is no
confusion between whether this is an actual property or magic getter,
because a look at var_dump of that object tells us the whole story.
Actually you could say that last sentence is precisely opposite of the 
truth in that a var_dump() will *never* expose properties that are 
available via a magic __get() therefore a var_dump() already mis-leads 
the developer because there can be properties that can be retrieved 
which are not shown by a simple var_dump().

With accessors you now make the case that the property can be the result of
any computation and as such var_dump only reveals the underlying storage
unit and has no awareness of any computation.

class foo {
 public $bar {
 get() { return 'baz'; }
 }
}

var_dump(json_encode(new foo),new foo, (new foo)-bar);

// gives us
string(12) {bar:null}
object(foo)#1 (1) {
   [bar]=
   NULL
}
string(3) baz


There's a subtle difference here that's not obvious at first. The
difference is that we have no way of knowing whether bar is the result of
an accessor or a an actual property without closely examining the code.
There's no easy way to debug who went wrong when this causes a problem. If
the property is now acting as a method we have to start treating it like a
method in order to debug it. That could mean backtraces, exception
handling, and a variety of other things that I really find weird to have to
do with an a property.


Now, let's examine the alternative. Using magic methods...

class foo {
 private $bar;
 public function __get($name) {
 if ($name == 'bar') {
 return 'baz';
 }
 }
}

var_dump(json_encode(new foo),new foo, (new foo)-bar);

string(2) {}
object(foo)#1 (1) {
   [bar:foo:private]=
   NULL
}
string(3) baz
There had been very recent talk of having an accessor output something 
to the effect of:

object(foo)#1 (1) {
  [bar:foo:accessor]=
  NULL
}

I would actually favor the idea that nothing can see the property value 
except the accessor and this would mean that a var_dump() would call the 
accessor.  By having var_dump() read the value of the underlying 
property directly it really violates the entire idea of an accessor.


Every other language that implements accessors (and it's most modern 
languages) there is no actual underlying property.  This is the way 1.1 
originally proposed it, but that was not what people wanted, they did 
not want to have to declare a backing property of their own and so it 
was changed.


The result of the current RFC is a result of the endless discussion that 
was had on this topic.  It's really not appropriate to vote against 
something if you did not make your voice heard when discussions of some 
aspect were happening.

At least here we know that bar is undoubtedly a private property so
whatever we got from (new foo)-bar must be the result of a magic getter.
There's only one place to look for that (in the magic method). With an
accessor I could easily create a situation where a bug manifests itself
anywhere in the code and not necessarily in the accessor itself that
accessor effectively becomes a method that does computation rather than
handling mere storage and retrieval.

I really really feel this is a way to give users lots of rope to hang

Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-23 Thread Sherif Ramadan
On Wed, Jan 23, 2013 at 12:00 PM, Clint Priest cpri...@zerocue.com wrote:


 Actually you could say that last sentence is precisely opposite of the
 truth in that a var_dump() will *never* expose properties that are
 available via a magic __get() therefore a var_dump() already mis-leads the
 developer because there can be properties that can be retrieved which are
 not shown by a simple var_dump().


They're not shown because they don't exist. Thus no confusion about whether
this is a property or not. If it's a property we can see it in
var_dump($obj). If it's magic you can only see it in
var_dump($obj-property). With accessors you see both, but you are seeing
(potentially) two different values. For me, that's the misleading part.

I agree that there are benefits here, but I can't agree that the benefits
outweigh the draw backs for me, which are all the added complexity. Like
Anthony said it's pretty much just coming down to custom scoping
getters/setters at the end of the day.





 The result of the current RFC is a result of the endless discussion that
 was had on this topic.  It's really not appropriate to vote against
 something if you did not make your voice heard when discussions of some
 aspect were happening.


I made my voice heard on the aspect that I was concerned with. My decision
was based on reading the entire RFC, downloading the patch, compiling the
code, testing it myself, and weighing the pros and cons of the proposal. I
believe I was pretty fair, but I am just one person of many that voted.


Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-23 Thread Marco Pivetta
On 23 January 2013 19:53, Sherif Ramadan theanomaly...@gmail.com wrote:


 They're not shown because they don't exist. Thus no confusion about whether
 this is a property or not. If it's a property we can see it in
 var_dump($obj). If it's magic you can only see it in
 var_dump($obj-property). With accessors you see both, but you are seeing
 (potentially) two different values. For me, that's the misleading part.

 I agree that there are benefits here, but I can't agree that the benefits
 outweigh the draw backs for me, which are all the added complexity. Like
 Anthony said it's pretty much just coming down to custom scoping
 getters/setters at the end of the day.



Actually, having the properties shown even if virtual allows us to access
them in a reflection-ish manner without doing dangerous assumptions like
does the setter/getter exist?

The fact that the property is virtual is very useful, even though in
dumping it doesn't show any value. I don't see any radical difference in
debugging or ease of use in general.
Actually, doing the same things with magic getters/setters would probably
imply having to think more about the trace we want to follow when analyzing
our bugs. It is just a matter of being aware of new setter/getters (that
are anyway in our trace).


Marco Pivetta

http://twitter.com/Ocramius

http://ocramius.github.com/


Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-23 Thread Clint Priest


On 1/23/2013 1:00 PM, Marco Pivetta wrote:


Actually, having the properties shown even if virtual allows us to 
access them in a reflection-ish manner without doing dangerous 
assumptions like does the setter/getter exist?


The fact that the property is virtual is very useful, even though in 
dumping it doesn't show any value. I don't see any radical difference 
in debugging or ease of use in general.
Actually, doing the same things with magic getters/setters would 
probably imply having to think more about the trace we want to follow 
when analyzing our bugs. It is just a matter of being aware of new 
setter/getters (that are anyway in our trace).




If you stop and think about it, the current accessors are identical in 
functionality to defining a private variable for every __get().


So these two sets of code work and act identically:

class Foo {
  private $bar;
  public __get($name) {
if($name == 'bar')
  return $this-bar;
  }
  public __set($name, $value) {
if($name == 'bar')
  $this-bar = $value;
  }
  public __isset($name) {
if($name == 'bar')
  return isset($this-bar);
  }
  public __unset($name) {
if($name == 'bar')
  unset($this-bar);
  }
}

-- OR --

class Foo {
  public $bar { get; set; }
}

Except in the first case, you have to look at four sections of code to 
find everything that applies to bar and if you add 5 or 6 more dynamic 
properties, you have 4 huge switch statements, again with all the code 
split up everywhere.


With Property Accessors, it's all right there.  This of course is a very 
simple case, if you actually USE the dynamic nature of __get(), etc then 
you've got a ton more code.


--
-Clint

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-23 Thread Levi Morrison
On Wed, Jan 23, 2013 at 2:07 PM, Clint Priest cpri...@zerocue.com wrote:

 On 1/23/2013 1:00 PM, Marco Pivetta wrote:


 Actually, having the properties shown even if virtual allows us to access
 them in a reflection-ish manner without doing dangerous assumptions like
 does the setter/getter exist?

 The fact that the property is virtual is very useful, even though in
 dumping it doesn't show any value. I don't see any radical difference in
 debugging or ease of use in general.
 Actually, doing the same things with magic getters/setters would probably
 imply having to think more about the trace we want to follow when analyzing
 our bugs. It is just a matter of being aware of new setter/getters (that are
 anyway in our trace).


 If you stop and think about it, the current accessors are identical in
 functionality to defining a private variable for every __get().

 So these two sets of code work and act identically:

 class Foo {
   private $bar;
   public __get($name) {
 if($name == 'bar')
   return $this-bar;
   }
   public __set($name, $value) {
 if($name == 'bar')
   $this-bar = $value;
   }
   public __isset($name) {
 if($name == 'bar')
   return isset($this-bar);
   }
   public __unset($name) {
 if($name == 'bar')
   unset($this-bar);
   }
 }

 -- OR --

 class Foo {
   public $bar { get; set; }
 }

 Except in the first case, you have to look at four sections of code to find
 everything that applies to bar and if you add 5 or 6 more dynamic
 properties, you have 4 huge switch statements, again with all the code split
 up everywhere.

 With Property Accessors, it's all right there.  This of course is a very
 simple case, if you actually USE the dynamic nature of __get(), etc then
 you've got a ton more code.

Let's not forget that all __get and __set would have save visibility
unless you manually controlled that which means more coding. Yay!

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-22 Thread Clint Priest


On 1/17/2013 12:20 PM, Clint Priest wrote:
I'm happy to say that Property Accessors is ready for a vote for 
inclusion in 5.5 release.


Nikita and I (as well as Stas a bit) have all been working hard to 
make this happen for 5.5, voting and the specifications are here:


https://wiki.php.net/rfc/propertygetsetsyntax-v1.2#voting



For those that have voted against this proposal, are there any 
clarifications that can be made or questions answered?


There seems to be a lot of userland support for this proposal from 
people who don't have voting rights.


--
-Clint

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-22 Thread Lester Caine

Clint Priest wrote:

There seems to be a lot of userland support for this proposal from people who
don't have voting rights.


And what about the userland people who don't want the additional complexity who 
don't have voting rights?


--
Lester Caine - G8HFL
-
Contact - http://lsces.co.uk/wiki/?page=contact
L.S.Caine Electronic Services - http://lsces.co.uk
EnquirySolve - http://enquirysolve.com/
Model Engineers Digital Workshop - http://medw.co.uk
Rainbow Digital Media - http://rainbowdigitalmedia.co.uk

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-22 Thread Marco Pivetta
@Lester seems pretty much opt-in to me :)

Marco Pivetta

http://twitter.com/Ocramius

http://ocramius.github.com/


Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-22 Thread Sebastian Krebs
2013/1/22 Lester Caine les...@lsces.co.uk

 Clint Priest wrote:

 There seems to be a lot of userland support for this proposal from people
 who
 don't have voting rights.


 And what about the userland people who don't want the additional
 complexity who don't have voting rights?


Don't use it. Regarding your other mails you are stuck with 5.2 anyway ;)




 --
 Lester Caine - G8HFL
 -
 Contact - 
 http://lsces.co.uk/wiki/?page=**contacthttp://lsces.co.uk/wiki/?page=contact
 L.S.Caine Electronic Services - http://lsces.co.uk
 EnquirySolve - http://enquirysolve.com/
 Model Engineers Digital Workshop - http://medw.co.uk
 Rainbow Digital Media - 
 http://rainbowdigitalmedia.co.**ukhttp://rainbowdigitalmedia.co.uk


 --
 PHP Internals - PHP Runtime Development Mailing List
 To unsubscribe, visit: http://www.php.net/unsub.php




-- 
github.com/KingCrunch


Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-22 Thread Lester Caine

Sebastian Krebs wrote:

Clint Priest wrote:

There seems to be a lot of userland support for this proposal from
people who
don't have voting rights.

And what about the userland people who don't want the additional complexity
who don't have voting rights?

Don't use it. Regarding your other mails you are stuck with 5.2 anyway ;)


No I'm committed now to converting everything to PHP5.4 which given the amount 
of work involved is going to take a couple of years, but does not give any 
'improvement' to the resulting projects. Just as the latest changes will only 
mean that we need to maintain PHP5.4 versions of libraries to prevent creep if 
these developments into those libraries. 'Don't use it' is simply not an 
acceptable argument when things added in one version become more integrated in 
the next as has happened between php5.2-3-4 and now 5.5 will take this even 
further. We NEED to nail down a clean base before changing the rules yet again ...


--
Lester Caine - G8HFL
-
Contact - http://lsces.co.uk/wiki/?page=contact
L.S.Caine Electronic Services - http://lsces.co.uk
EnquirySolve - http://enquirysolve.com/
Model Engineers Digital Workshop - http://medw.co.uk
Rainbow Digital Media - http://rainbowdigitalmedia.co.uk

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-22 Thread Marco Pivetta
@Lester your explanation simply exposes the fact that your resources to
upgrade to newer technologies are insufficient. This doesn't mean that
newer technologies don't have to exist.

And no, it won't be possible to fix all bugs/flaws before getting a new
feature. We'd all be running in circles looking for perfection :)

Marco Pivetta

http://twitter.com/Ocramius

http://ocramius.github.com/


Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-22 Thread Clint Priest


On 1/22/2013 6:55 AM, Marco Pivetta wrote:

@Lester your explanation simply exposes the fact that your resources to
upgrade to newer technologies are insufficient. This doesn't mean that
newer technologies don't have to exist.

And no, it won't be possible to fix all bugs/flaws before getting a new
feature. We'd all be running in circles looking for perfection :)
I can agree that some things need fixing though, perhaps Lester could 
put together an RFC detailing the myriad of things he deems critical to 
be fixed.

Marco Pivetta

http://twitter.com/Ocramius

http://ocramius.github.com/



--
-Clint

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-22 Thread Lester Caine

Clint Priest wrote:

And no, it won't be possible to fix all bugs/flaws before getting a new
feature. We'd all be running in circles looking for perfection :)

I can agree that some things need fixing though, perhaps Lester could put
together an RFC detailing the myriad of things he deems critical to be fixed.


Actually I don't have anything that I find 'critical'. I have perfectly working 
systems which only break when ISP's switch off PHP5.2 and install 5.3. HIDING 
warnings is simply the wrong way to handle BC ... We are forced to address these 
warnings simply because they can become errors in later versions. HAVING 
disabled the warnings and not addressed them is the critical bit that requires 
that code is re-writen in every version update!


--
Lester Caine - G8HFL
-
Contact - http://lsces.co.uk/wiki/?page=contact
L.S.Caine Electronic Services - http://lsces.co.uk
EnquirySolve - http://enquirysolve.com/
Model Engineers Digital Workshop - http://medw.co.uk
Rainbow Digital Media - http://rainbowdigitalmedia.co.uk

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-22 Thread Levi Morrison
 For those that have voted against this proposal, are there any
 clarifications that can be made or questions answered?

I can say that this bit is particularly confusing:

public $foo {}

My understanding that this code will not emit any warnings when
interpreted, but the $foo property has no getter nor setter. You can
call isset which will return false but unset will emit a warning, yes?

I would think that the above snippet would create a property with all
public, default implementations. I see why it doesn't: it doesn't
permit you to declare only a getter and no setter.

This is just one more reason for me to vote no on this.

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-22 Thread Gordon Oheim

Am 22.01.2013 02:46, schrieb Clint Priest:


On 1/20/2013 3:11 PM, Gordon Oheim wrote:

Am 17.01.2013 19:20, schrieb Clint Priest:

I'm happy to say that Property Accessors is ready for a vote for
inclusion in 5.5 release.

Nikita and I (as well as Stas a bit) have all been working hard to make
this happen for 5.5, voting and the specifications are here:

https://wiki.php.net/rfc/propertygetsetsyntax-v1.2#voting

Thanks,

-Clint


Thanks Clint and Niki for your work. Sorry to respond only now that
the voting process has already started. I usually don't
follow/participate on internals due to the noise and poisoned
atmosphere (but that's a different story). Also thanks Niki for taking
the time to answer all my questions I had about this beforehand.

My main issue with the implementation at hand is the weird way in
which we allow the visibility on the properties to be declared, e.g.

public $foo { get; protected set; }

The visibility keyword on the property is watering down the visibility
semantics. Either the property is public (then it can be set) or it is
not public. I would have much less of a problem with this, if
declaring visibility on a property could only be loosened but not
tightened. That would at least be consistent with how visibility works
with inheritance. It would be much better though to remove the
visibility keyword from the property altogether. It almost never tells
the truth.


This is basically an argument against asymmetrical visibility altogether
which is one of the most useful features of this proposal.  I think
there are many use cases where an object wants to be able to emit a
message (value) but not receive one and being able to declare that fact
is important.



I understand the purpose and utility of having different levels of 
visibility. I am not argueing against that. I am argueing that putting 
the visibility on the property does not give accurate information about 
the property's visibility itself.


Contrived Example: doing just public $foo (Traditional Property) means I 
can access the property from everywhere directly. But doing public $foo 
{} (Guarded Property) means I cannot access the property *at all*. So we 
went through full access to no access just by adding curly braces. 
Likewise, private $foo { public get; public set; } is not private at all.


When the visiblity only applies to declared accessors we should just 
declare in on the accessors only. That makes for better semantics. After 
all, it's a guarded property, which already implies that it is hidden 
behind accessors and thus non-public.



Removing the visibility keyword from the property altogether would
also remove the purported default visibility that is applied to the
accessors. I say purported because doing

public $foo { get; protected set; }

will also change the unset accessor to protected, which makes perfect
sense when you think about it but is completely unobvious when the
declaration claims the default visibility of all accessors to be
public. The default visibility of isset is that of get and the default
visibility of unset is that of set instead.

To add to the confusion, doing

public $foo { get; protected set; public unset; }

WILL work and change the visibility of unset back to what the property
claims it is. This should not be necessary when visibility on the
keyword defines the default visibility. I guess it's safe to say that
having the visibility on the property does very little to express
anything meaningful about the property or the default visibility of
*all* the accessors.


Perhaps this is just a documentation problem in that somewhere the
implication that public applies to all accessors when it should really
say that it applies to all declared accessors.


Yes, that should be stretched. I think the final documentation should 
also strongly emphasize that Guarded Properties is an entirely new 
concept and not some extension to Traditional Properties or to Magic 
Methods. We should prevent people from trying to map these new Guarded 
Properties onto their existing mental models of how Traditional 
Properties or Magic Methods work.




It is perfectly logical that when you cannot set a value, then you
cannot unset a value.

Defining what you have done above is declaring that you want to allow
people to get or unset the value, but not set it directly. This makes
sense in some usage scenarios.  As an example, perhaps $foo represents
an internally generated id which is generated on the first call to the
getter, you don't want outsiders to specify the id, but you're okay with
having it unset so that a new one can be generated with the internal
generation mechanics on the next get request.



As an aside, your previous example can also be declared like this:
 public $foo { get; protected set; unset; }

unset is explicitly declared and implicitly implemented and is public,
isset would be implicitly declared and implicitly implemented and follow
the visibility of the 

Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-22 Thread Rasmus Lerdorf
On 01/22/2013 03:18 AM, Clint Priest wrote:
 
 On 1/17/2013 12:20 PM, Clint Priest wrote:
 I'm happy to say that Property Accessors is ready for a vote for
 inclusion in 5.5 release.

 Nikita and I (as well as Stas a bit) have all been working hard to
 make this happen for 5.5, voting and the specifications are here:

 https://wiki.php.net/rfc/propertygetsetsyntax-v1.2#voting

 
 For those that have voted against this proposal, are there any
 clarifications that can be made or questions answered?
 
 There seems to be a lot of userland support for this proposal from
 people who don't have voting rights.

The simple explanation from me is that the ROI isn't there on this one.
It adds a lot of code complexity for very little return. Yes, it saves a
couple of lines of boilerplate code for a few people, but the cost is
high in terms of ongoing maintenance and potential issues for opcode
caches as well. If you look at the split in voting you will notice it is
pretty much split along the lines of the people who have to maintain
this code vs. the people who would like a shiny new feature.

-Rasmus


-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-22 Thread Nikita Popov
On Tue, Jan 22, 2013 at 6:20 PM, Rasmus Lerdorf ras...@lerdorf.com wrote:

 The simple explanation from me is that the ROI isn't there on this one.
 It adds a lot of code complexity for very little return. Yes, it saves a
 couple of lines of boilerplate code for a few people, but the cost is
 high in terms of ongoing maintenance and potential issues for opcode
 caches as well. If you look at the split in voting you will notice it is
 pretty much split along the lines of the people who have to maintain
 this code vs. the people who would like a shiny new feature.


I did a bit of testing with APC today and here is what I came up with:
https://gist.github.com/4597660 It adds the logic for copying the accessor
functions in my_copy_property_info*. This seemed to do the trick in my
testing, but I don't really know APC, so I can't judge whether it might
require further changes.

Thanks,
Nikita


Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-22 Thread Clint Priest

On 1/22/2013 11:20 AM, Rasmus Lerdorf wrote:

On 01/22/2013 03:18 AM, Clint Priest wrote:


For those that have voted against this proposal, are there any
clarifications that can be made or questions answered?

There seems to be a lot of userland support for this proposal from
people who don't have voting rights.

The simple explanation from me is that the ROI isn't there on this one.
It adds a lot of code complexity for very little return. Yes, it saves a
couple of lines of boilerplate code for a few people, but the cost is
high in terms of ongoing maintenance and potential issues for opcode
caches as well. If you look at the split in voting you will notice it is
pretty much split along the lines of the people who have to maintain
this code vs. the people who would like a shiny new feature.

Hey Rasmus,

With all due respect, I think you missed the post where Nikita Popov 
analysed two of the biggest PHP based frameworks around, Symfony 
(Standard) and Zend Framework where he found that there were 3,805 and 
4,080 functions which served as a getter or a setter.  I do not think 
his analysis even included any usage of __get() or __set(). Here is his 
original gist of his analysis:


https://gist.github.com/3884203

In terms of cost of maintenance, I was under the impression that since I 
wrote it, I would be maintaining it which is why I applied for and you 
approved a VCS account for me.


Lastly, I'm not sure if you have looked over the code, but a very large 
amount of duplicate code has been cleaned up and centralized, both 
property accessors and magic accessors use the same pre/post function 
and logic.  I can honestly say that adding the feature to the project 
would *improve* the code base.

-Rasmus



--
-Clint

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-22 Thread Clint Priest

On 1/22/2013 9:24 AM, Levi Morrison wrote:

For those that have voted against this proposal, are there any
clarifications that can be made or questions answered?

I can say that this bit is particularly confusing:

 public $foo {}

My understanding that this code will not emit any warnings when
interpreted, but the $foo property has no getter nor setter. You can
call isset which will return false but unset will emit a warning, yes?
This is correct except in the case where you are inheriting the 
property.  The above, on it's own class would be pointless.

I would think that the above snippet would create a property with all
public, default implementations.
If you are looking to create a public property with default 
implementations, the following will suffice and has for a long time:


public $foo;

I see why it doesn't: it doesn't
permit you to declare only a getter and no setter.
Not sure what you mean here, you can declare a property with a getter 
and no setter, such as:


public $foo { get; }

Which allows the property to be read, but not written, this is what the 
asymmetrical access is about.

This is just one more reason for me to vote no on this.


--
-Clint

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-22 Thread Crypto Compress

Am 22.01.2013 22:27, schrieb Clint Priest:
property accessors and magic accessors use the same pre/post function 
and logic
So this is the reason for some magic behaviour of property 
accessors. Logically property accessors may be a subset of magic 
accessors but not the other way around.


cryptocompress

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-22 Thread Christopher Jones



On 01/22/2013 01:27 PM, Clint Priest wrote:

In terms of cost of maintenance, I was under the impression that
since I wrote it, I would be maintaining it which is why I applied
for and you approved a VCS account for me.


The concern is historical and not personal.  Frequently the long-term
contributors to PHP have been left to stabilize, integrate (e.g. with
APC), and then maintain code that was contributed.

I do note  appreciate your outstanding perseverance and leadership in
working through the RFC process.

Chris

--
christopher.jo...@oracle.com  http://twitter.com/ghrd
Newly updated, free PHP  Oracle book:
http://www.oracle.com/technetwork/topics/php/underground-php-oracle-manual-098250.html

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-22 Thread Clint Priest


On Jan 22, 2013, at 6:00 PM, Christopher Jones christopher.jo...@oracle.com 
wrote:
 On 01/22/2013 01:27 PM, Clint Priest wrote:
 In terms of cost of maintenance, I was under the impression that
 since I wrote it, I would be maintaining it which is why I applied
 for and you approved a VCS account for me.
 
 The concern is historical and not personal.  Frequently the long-term
 contributors to PHP have been left to stabilize, integrate (e.g. with
 APC), and then maintain code that was contributed.
 
 I do note  appreciate your outstanding perseverance and leadership in
 working through the RFC process.
 
Thanks, its been a long hard road for two years.  I've wanted to contribute to 
PHP for years but there was a steep learning curve.  

I'm personally honored to have been given a VCS account and would like to see 
the project flourish far beyond where it is presently, I fully intend to be a 
long term core contributor to this project.

I would also like to thank Nikita as he has done a lot with the project as 
well.  Were it not for him, it would not be ready for release.

-Clint

 Chris
 
 -- 
 christopher.jo...@oracle.com  http://twitter.com/ghrd
 Newly updated, free PHP  Oracle book:
 http://www.oracle.com/technetwork/topics/php/underground-php-oracle-manual-098250.html
 
 -- 
 PHP Internals - PHP Runtime Development Mailing List
 To unsubscribe, visit: http://www.php.net/unsub.php
 

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-22 Thread Anthony Ferrara
Rasmus,

If you look at the split in voting you will notice it is
 pretty much split along the lines of the people who have to maintain
 this code vs. the people who would like a shiny new feature.


I pulled some numbers, and this isn't really the case.

Based off of commits from the past year (since 2012-01-01), here are the
raw numbers:
No: 1238
Yes: 895

But if you remove the top 2 committing voters (in general, not tied to a
list), the numbers even out quite significantly:
No: 514
Yes: 456

So I think that point falls somewhat flat...

I'm not saying this to raise issues or anything. I just want to point out
that the active maintainers are working on both sides of the fence. It's
not a maintainers vs the others vote split...

Anthony


Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-22 Thread Rasmus Lerdorf
On 01/22/2013 04:41 PM, Anthony Ferrara wrote:
 Rasmus,
 
 If you look at the split in voting you will notice it is
 pretty much split along the lines of the people who have to maintain
 this code vs. the people who would like a shiny new feature.
 
 
 I pulled some numbers, and this isn't really the case.
 
 Based off of commits from the past year (since 2012-01-01), here are the

Now do 5 or even 10+ years and commits to Zend and APC. We are talking
about a core language feature here, so commits to the code most affected
is what you should be looking at and when I talk about maintenance I
talk about code we are fixing 10 years from now. Commits in the past
year doesn't really reflect that very well.

-Rasmus


-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-22 Thread Anthony Ferrara
Rasmus,

Now do 5 or even 10+ years and commits to Zend and APC. We are talking
 about a core language feature here, so commits to the code most affected
 is what you should be looking at and when I talk about maintenance I
 talk about code we are fixing 10 years from now. Commits in the past
 year doesn't really reflect that very well.


True, but if someone hasn't been active with even a single commit in the
past year, I don't think they should be counted as an active maintainer.

I ran the numbers back to 2011. And they actually shift more towards Yes:
Total Commits:
No: 2011
Yes: 1877

All but top 2:
No: 996
Yes: 1011

And for 2010 (past 3 years):
No: 2455
Yes: 2395

All but top 2:
No: 1440
Yes: 1028

This is pointless though. The point is pretty well proven that within
reason the activity level of both groups is about even.

And when measuring a feature against number of maintainers, I honestly
believe that only current active maintainers should count for that ranking.
It's not about discrediting prior contributors. Not in the least. I'm not
suggesting their votes should count less. I'm not suggesting that they
should lose voting rights or anything like that. But to count active
maintainers against a list which contains people who's last commit was in
2006 isn't fair.

Anthony


Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-21 Thread Clint Priest


On 1/20/2013 3:11 PM, Gordon Oheim wrote:

Am 17.01.2013 19:20, schrieb Clint Priest:

I'm happy to say that Property Accessors is ready for a vote for
inclusion in 5.5 release.

Nikita and I (as well as Stas a bit) have all been working hard to make
this happen for 5.5, voting and the specifications are here:

https://wiki.php.net/rfc/propertygetsetsyntax-v1.2#voting

Thanks,

-Clint


Thanks Clint and Niki for your work. Sorry to respond only now that 
the voting process has already started. I usually don't 
follow/participate on internals due to the noise and poisoned 
atmosphere (but that's a different story). Also thanks Niki for taking 
the time to answer all my questions I had about this beforehand.


My main issue with the implementation at hand is the weird way in 
which we allow the visibility on the properties to be declared, e.g.


public $foo { get; protected set; }

The visibility keyword on the property is watering down the visibility 
semantics. Either the property is public (then it can be set) or it is 
not public. I would have much less of a problem with this, if 
declaring visibility on a property could only be loosened but not 
tightened. That would at least be consistent with how visibility works 
with inheritance. It would be much better though to remove the 
visibility keyword from the property altogether. It almost never tells 
the truth.


This is basically an argument against asymmetrical visibility altogether 
which is one of the most useful features of this proposal.  I think 
there are many use cases where an object wants to be able to emit a 
message (value) but not receive one and being able to declare that fact 
is important.


Removing the visibility keyword from the property altogether would 
also remove the purported default visibility that is applied to the 
accessors. I say purported because doing


public $foo { get; protected set; }

will also change the unset accessor to protected, which makes perfect 
sense when you think about it but is completely unobvious when the 
declaration claims the default visibility of all accessors to be 
public. The default visibility of isset is that of get and the default 
visibility of unset is that of set instead.


To add to the confusion, doing

public $foo { get; protected set; public unset; }

WILL work and change the visibility of unset back to what the property 
claims it is. This should not be necessary when visibility on the 
keyword defines the default visibility. I guess it's safe to say that 
having the visibility on the property does very little to express 
anything meaningful about the property or the default visibility of 
*all* the accessors.


Perhaps this is just a documentation problem in that somewhere the 
implication that public applies to all accessors when it should really 
say that it applies to all declared accessors.


It is perfectly logical that when you cannot set a value, then you 
cannot unset a value.


Defining what you have done above is declaring that you want to allow 
people to get or unset the value, but not set it directly. This makes 
sense in some usage scenarios.  As an example, perhaps $foo represents 
an internally generated id which is generated on the first call to the 
getter, you don't want outsiders to specify the id, but you're okay with 
having it unset so that a new one can be generated with the internal 
generation mechanics on the next get request.


As an aside, your previous example can also be declared like this:
public $foo { get; protected set; unset; }

unset is explicitly declared and implicitly implemented and is public, 
isset would be implicitly declared and implicitly implemented and follow 
the visibility of the getter.


isset/unset only follow the get/set visibility if isset/unset are left 
undeclared.


If this could be changed, I'd be more willing to vote pro the proposal.

TL;DR: The visibility keyword on the property is almost never giving 
an accurate information about the accessor visibility. Thus, it should 
be removed or replaced for clarity's sake.


I think I've made the case above that this isn't accurate, it always 
affects declared accessors which do not have their own visibility specified.




Regards,
Gordon



--
-Clint

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-20 Thread Nikita Popov
On Sun, Jan 20, 2013 at 5:46 AM, Sherif Ramadan theanomaly...@gmail.comwrote:

 I'm not sure if this has already come up in past discussion or not. So
 I apologize in advance if this is repetitive. The discussion for property
 accessors has been so lengthy I couldn't find the time to keep up with it
 all.

 However, I found some time to play around with the patch today and I
 noticed something that might use improving. When you use var_dump() on the
 object properties that have defined get accessors don't produce any useful
 output with var_dump. Is this fixable?


The var_dump will output the state of the object, i.e. the values that are
internally stored. It will not go through the get accessors, rather it will
directly give you the value of the underlying property. If the underlying
property is not used, then it will just give you NULL.

Nikita


Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-20 Thread Sherif Ramadan
On Sun, Jan 20, 2013 at 8:08 AM, Nikita Popov nikita@gmail.com wrote:

 On Sun, Jan 20, 2013 at 5:46 AM, Sherif Ramadan 
 theanomaly...@gmail.comwrote:

 I'm not sure if this has already come up in past discussion or not. So
 I apologize in advance if this is repetitive. The discussion for property
 accessors has been so lengthy I couldn't find the time to keep up with it
 all.

 However, I found some time to play around with the patch today and I
 noticed something that might use improving. When you use var_dump() on the
 object properties that have defined get accessors don't produce any useful
 output with var_dump. Is this fixable?


 The var_dump will output the state of the object, i.e. the values that are
 internally stored. It will not go through the get accessors, rather it will
 directly give you the value of the underlying property. If the underlying
 property is not used, then it will just give you NULL.


While I agree with your initial assessment of the accessor not having set
any value, and therefore the logic of var_dump only providing what is
stored in the object's instance properties, I disagree with your
interpretation of what var_dump should do here.

Here is my reasoning for this:

1) var_dump is documented to provide you with information about a variable
(there is no mention of its implementation being limited to what the
variable stores).

2) Even if you interpret this to mean that var_dump will output the state
of the object then you are still wrong, since var_dump($foo-accessor) will
give me a value that the object does not store if the accessor returns a
computation rather than a stored value.

3) If this were a discussion of distinguishing between magic methods such
as __get/__set then we can simply say that only inaccessible properties can
invoke such methods and as such we have no confusion between what the
object stores and what var_dump returns when invoking those methods. With
accessors it is not the case at all.


Here's an example


class surface {
  public $area {
get { return $this-width * $this-height; }
private set;
  }
  public $width {
set($val) { $this-width = $val; }
private get;
  }
  public $height {
set ($val) { $this-height = $val; }
private get;
  }
}

$surface = new surface;
var_dump($surface);

this gives us the following output for $surface...

object(surface)#1 (3) {
  [area]=
  NULL
  [width]=
  NULL
  [height]=
  NULL
}

This is to be completely expected since, technically, all we did here was
use class initialization that provided public properties initialized to
null.

However, let's say we set $surface-width and $surface-height...

$surface-width = 4;
$surface-height = 2;
var_dump($surface);

Now $surface shows us the following from var_dump

object(surface)#1 (3) {
  [area]=
  NULL
  [width]=
  int(4)
  [height]=
  int(2)
}


This is not accurate since var_dump($surface-area) will give us the
following...

int(8)

It's not obvious what's happening here if I'm debugging this code in real
life, because on one hand I can see that my instance property returns a
value (which I expect). On the other hand I see my object has a null
property, which I don't expect. If this were magic the property would
simply not exist and i would know to look for __get / __set magic. Now, if
we argue that accessors are magic then why do they also not work like
magic? This is a bit of a hybrid approach, and I understand the reasoning
for most of what's going on here. I'm not here to argue about
implementation details.

What I'm saying is this kind of behavior needs far more serious reasoning
than the very naive assesment you're making above.

I mean that with all due respect. Just wondering if there is another take
on this from anyone else?

Sherif,
He who asks too many questions



 Nikita




Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-20 Thread Gustavo Lopes
On Sun, 20 Jan 2013 14:35:14 +0100, Sherif Ramadan  
theanomaly...@gmail.com wrote:

What I'm saying is this kind of behavior needs far more serious reasoning
than the very naive assesment you're making above.

I mean that with all due respect. Just wondering if there is another take
on this from anyone else?



I think the current behavior is most appropriate one for var_dump() (and  
array casts/get_object_vars()). It's the same behavior as if you had  
manually defined getXXX() methods or used __get().


If you start marking function calls, you get new problems like handling  
getters that throw exceptions or have side effects (the code behaves  
differently when add a var_dump()?!).


--
Gustavo Lopes

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-20 Thread Sherif Ramadan
On Sun, Jan 20, 2013 at 8:45 AM, Gustavo Lopes glo...@nebm.ist.utl.ptwrote:

 On Sun, 20 Jan 2013 14:35:14 +0100, Sherif Ramadan 
 theanomaly...@gmail.com wrote:

 What I'm saying is this kind of behavior needs far more serious reasoning
 than the very naive assesment you're making above.

 I mean that with all due respect. Just wondering if there is another take
 on this from anyone else?


 I think the current behavior is most appropriate one for var_dump() (and
 array casts/get_object_vars()). It's the same behavior as if you had
 manually defined getXXX() methods or used __get().


It's actually not the same behavior at all. __get can only work on
inaccessible properties. So I would not see NULL there in the object and
then get a value in the instance property.



 If you start marking function calls, you get new problems like handling
 getters that throw exceptions or have side effects (the code behaves
 differently when add a var_dump()?!).


I'm not suggesting the getters should be invoked from afar. I'm just
suggesting some additional means of informing the user of the existence of
that getter to distinguish it from the property in the output of var_dump.

So for example, in var_dump, you can get [property:protected] = ... when
the property has a visibility outside of the current context. It might be
helpful to provide some similar behavior for accessors with null
initialized values, but have getters available to the caller?

Just a thought.




 --
 Gustavo Lopes



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-20 Thread Gustavo Lopes
On Sun, 20 Jan 2013 14:52:36 +0100, Sherif Ramadan  
theanomaly...@gmail.com wrote:



I think the current behavior is most appropriate one for var_dump() (and
array casts/get_object_vars()). It's the same behavior as if you had
manually defined getXXX() methods or used __get().


It's actually not the same behavior at all. __get can only work on
inaccessible properties. So I would not see NULL there in the object and
then get a value in the instance property.


OK, it's not 100% analogous. And I'm ready to concede that the differences  
that do exist may be (arguably) sufficient to draw a principled  
distinction, namely:


* getXXX() is clearly a method call and not a (direct) property read and  
the XXX property may not even exist.
* __get() only works on inaccessible properties, so there is no possible  
confusion.


I still think you put too much emphasis on the __get() argument -- even  
though there is no accessible property, there may be a protected/private  
property; it it isn't the case, there's still usually some backing  
storage, like a private array (shown in var_dump()) and the backing value  
may be different from what's returned.


In any case, assuming this feature is accepted, the current solution,  
whether in isolation it's appropriate or not, must be evaluated in the  
light of the alternatives. Here, I thought you were proposing calling the  
getters.



If you start marking function calls, you get new problems like handling
getters that throw exceptions or have side effects (the code behaves
differently when add a var_dump()?!).



I'm not suggesting the getters should be invoked from afar. I'm just
suggesting some additional means of informing the user of the existence  
of that getter to distinguish it from the property in the output of  
var_dump.


So for example, in var_dump, you can get [property:protected] = ...  
when the property has a visibility outside of the current context. It  
might be

helpful to provide some similar behavior for accessors with null
initialized values, but have getters available to the caller?


We could add some sort of marker to indicate the property is an accessor.  
It would not be trivial under the current implementation as  
get_properties() and get_debug_info() only return a HashTable*, so some  
abstraction breaking would be required.


Another possibility would be the ability to mark some properties as not  
backed by any storage, like the area in your example. But this would still  
be insufficient to eliminate confusion in cases like this:


class A {
private $scale;
public $value {
get { return $this-value * $this-scale; }
set;
}
function __construct($scale) { $this-scale = (double)$scale; }
}

--
Gustavo Lopes

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-20 Thread Clint Priest


On 1/20/2013 7:35 AM, Sherif Ramadan wrote:

Now $surface shows us the following from var_dump

object(surface)#1 (3) {
  [area]=
  NULL
  [width]=
  int(4)
  [height]=
  int(2)
}

Sounds like a reasonable approach to me... var_dump()

1) Should not invoke the getters..
2) Should indicate that they are property accessors (perhaps not even 
show the underlying guarded property?)


Possibly:

object(surface)#1 (3) {
  [area:accessor]=
  NULL
  [width:accessor]=
  int(4)
  [height:accessor]=
  int(2)
}

This could easily be changed if nobody had any further disagreements 
with this?


Only issue I could see would be existing code that may parse var_dump() 
might break if it wasn't written to accept something other that 
private/protected...


--
-Clint


Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-20 Thread Sherif Ramadan
On Sun, Jan 20, 2013 at 10:31 AM, Clint Priest cpri...@zerocue.com wrote:


 On 1/20/2013 7:35 AM, Sherif Ramadan wrote:

   Now $surface shows us the following from var_dump

  object(surface)#1 (3) {
   [area]=
   NULL
   [width]=
   int(4)
   [height]=
   int(2)
 }

 Sounds like a reasonable approach to me... var_dump()

 1) Should not invoke the getters..


I can agree this since the side effects could be unpredictable (as in the
case of an accessor implementing an actual method rather than dealing with
with any values -- the performance loss is unjustified)


 2) Should indicate that they are property accessors (perhaps not even show
 the underlying guarded property?)


That is a sensible approach to me.



 Possibly:

  object(surface)#1 (3) {
   [area:accessor]=
   NULL
   [width:accessor]=
   int(4)
   [height:accessor]=
   int(2)
 }

 This could easily be changed if nobody had any further disagreements with
 this?

 Only issue I could see would be existing code that may parse var_dump()
 might break if it wasn't written to accept something other that
 private/protected...


I think that one should rely on serialize or json_* serialization methods
or parsing data structures as opposed to var_dump output, since var_dump
doesn't always provide parseable output. Look at the output of DateTime
objects from var_dump or DateInterval objects, which have changed a bit
over 5.2 - 5.3 and other objects like DOMDocument, which at one point did
not have any meaningful var_dump output at all.




 --
 -Clint



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-20 Thread Gordon Oheim

Am 17.01.2013 19:20, schrieb Clint Priest:

I'm happy to say that Property Accessors is ready for a vote for
inclusion in 5.5 release.

Nikita and I (as well as Stas a bit) have all been working hard to make
this happen for 5.5, voting and the specifications are here:

https://wiki.php.net/rfc/propertygetsetsyntax-v1.2#voting

Thanks,

-Clint


Thanks Clint and Niki for your work. Sorry to respond only now that the 
voting process has already started. I usually don't follow/participate 
on internals due to the noise and poisoned atmosphere (but that's a 
different story). Also thanks Niki for taking the time to answer all my 
questions I had about this beforehand.


IMO, the new getter/setter syntax adds very little benefit for the loads 
of syntax it introduces. I understand that people are looking forward to 
that new feature though, so I won't oppose it just because I have little 
use for it.


My main issue with the implementation at hand is the weird way in which 
we allow the visibility on the properties to be declared, e.g.


public $foo { get; protected set; }

The visibility keyword on the property is watering down the visibility 
semantics. Either the property is public (then it can be set) or it is 
not public. I would have much less of a problem with this, if declaring 
visibility on a property could only be loosened but not tightened. That 
would at least be consistent with how visibility works with inheritance. 
It would be much better though to remove the visibility keyword from the 
property altogether. It almost never tells the truth.


Removing the visibility keyword from the property altogether would also 
remove the purported default visibility that is applied to the 
accessors. I say purported because doing


public $foo { get; protected set; }

will also change the unset accessor to protected, which makes perfect 
sense when you think about it but is completely unobvious when the 
declaration claims the default visibility of all accessors to be public. 
The default visibility of isset is that of get and the default 
visibility of unset is that of set instead.


To add to the confusion, doing

public $foo { get; protected set; public unset; }

WILL work and change the visibility of unset back to what the property 
claims it is. This should not be necessary when visibility on the 
keyword defines the default visibility. I guess it's safe to say that 
having the visibility on the property does very little to express 
anything meaningful about the property or the default visibility of 
*all* the accessors.


I briefly discussed possible solutions to this problem with Niki. Simply 
removing the visibility looks odd


$foo { get; protected set; public unset; }

but might be the easiest approach. The above would follow the same rules 
visibility follows for any other methods, e.g. omitting the visibility 
on the accessor will make it public.


Both of us are not keen on introducing new keywords, though I find

property $foo { get; protected set; public unset; }

quite nice and it is also more obvious that this is not your regular 
property. Niki suggested


var $foo { get; protected set; public unset; }

but it's keyword recycling and one could argue that in PHP4 a var was 
always public. But then again, PHP4 didn't have the concept of 
visibility at all, so why not?


If this could be changed, I'd be more willing to vote pro the proposal.

TL;DR: The visibility keyword on the property is almost never giving an 
accurate information about the accessor visibility. Thus, it should be 
removed or replaced for clarity's sake.


Regards,
Gordon

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-20 Thread Crypto Compress

Hello Clint, Nikita and Stas.

 To facilitate complete functionality with properties it is necessary to
 provide accessor functions to act on isset() and unset() calls.
 Note: isset  unset implementations are always provided with default
 implementations unless the author explicitly defines their own.

a) With magic methods we can make the accessed property inaccessible (as
properties may appear/disappear at runtime) and so we need some magic there
(__isset/__unset as of 5.1).
A property (accessors) is defined at design-time and may not become
inaccessible so the default implementation for isset/unset should be 
sufficient.


b) Result of (unset)$this-foo is always NULL.
If we provide a way to alter this set(NULL) behavior:
- it may fail before calling set(NULL)
- unset($this-foo); $this-foo !== (unset)$this-foo; // foo is not foo?

c) Logically isset/unset methods wrap up getter/setter at a higher level.
Maybe both methods are better suited for operator 
overloading/overriding RFC

where i would again expect some magic too.

I wonder what the functionality would be as someone have to override
isset/unset accessors. Do you have some examples?

cryptocompress

http://3v4l.org/NJWsW


--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-19 Thread Sherif Ramadan
On Thu, Jan 17, 2013 at 8:42 PM, Clint Priest cpri...@zerocue.com wrote:


 On 1/17/2013 4:24 PM, Steve Clay wrote:

  https://wiki.php.net/rfc/**propertygetsetsyntax-v1.2#**votinghttps://wiki.php.net/rfc/propertygetsetsyntax-v1.2#voting

 I'll say my peace on this. This is a very good implementation, and as
 long as authors use accessors that depend on a separate property for
 storage (like other langs require), everything will be straightforward.
 Otherwise, I fear they're in for some confusing behavior.

 Consider the code from the RFC:

 class TimePeriod {
 public $Hours {
 get { return $this-Hours ?: not specified; }
 set { $this-Hours = $value; }
 }
 }

 $tp = new TimePeriod();
 $tp-Hours; // not specified
 isset($tp-Hours); // true!?

  $tp-Hours isset, the property exists and it's value is non-null.


  The auto implementation of isset compares $this-Hours to NULL, but since
 $this-Hours goes through the getter, it will return not specified. So
 the property will always appear to be isset.

 * The guards seem spooky: A set of tokens ($this-prop) will have varying
 behavior (e.g. direct prop read vs. getter call) *depending on the call
 stack*.

 This is the same as would occur with isset against an undefined property,
 that would call __isset(), followed by __get() which would then compare the
 value to NULL.


 * Giving issetter/unsetter no direct access to the property limits
 functionality and leads to weirdness like the example above.

  This is possible, simply by supplying your own implementation of
 isset/unset that calls isset/unset, such as:

 public $foo {
 get; set;
 isset { return isset($this-foo); }
 unset { unset($this-foo); }
 }

 The above five lines of code is exactly equivalent in functionality to:

 public $foo;

 -Clint


 --
 PHP Internals - PHP Runtime Development Mailing List
 To unsubscribe, visit: http://www.php.net/unsub.php



I'm not sure if this has already come up in past discussion or not. So
I apologize in advance if this is repetitive. The discussion for property
accessors has been so lengthy I couldn't find the time to keep up with it
all.

However, I found some time to play around with the patch today and I
noticed something that might use improving. When you use var_dump() on the
object properties that have defined get accessors don't produce any useful
output with var_dump. Is this fixable?


Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-17 Thread Benjamin Eberlei
On Thu, Jan 17, 2013 at 7:20 PM, Clint Priest cpri...@zerocue.com wrote:

 I'm happy to say that Property Accessors is ready for a vote for inclusion
 in 5.5 release.

 Nikita and I (as well as Stas a bit) have all been working hard to make
 this happen for 5.5, voting and the specifications are here:

 https://wiki.php.net/rfc/**propertygetsetsyntax-v1.2#**votinghttps://wiki.php.net/rfc/propertygetsetsyntax-v1.2#voting

 Thanks,

 -Clint


This is great news, thank you very much for all your hard work! Its much
appreciated!


Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-17 Thread Steve Clay

On 1/17/13 1:20 PM, Clint Priest wrote:

I'm happy to say that Property Accessors is ready for a vote for inclusion in 
5.5 release.

Nikita and I (as well as Stas a bit) have all been working hard to make this 
happen for
5.5, voting and the specifications are here:


 https://wiki.php.net/rfc/propertygetsetsyntax-v1.2#voting

I'll say my peace on this. This is a very good implementation, and as long as authors use 
accessors that depend on a separate property for storage (like other langs require), 
everything will be straightforward. Otherwise, I fear they're in for some confusing behavior.


Consider the code from the RFC:

class TimePeriod {
public $Hours {
get { return $this-Hours ?: not specified; }
set { $this-Hours = $value; }
}
}

$tp = new TimePeriod();
$tp-Hours; // not specified
isset($tp-Hours); // true!?

The auto implementation of isset compares $this-Hours to NULL, but since $this-Hours 
goes through the getter, it will return not specified. So the property will always 
appear to be isset.


* The guards seem spooky: A set of tokens ($this-prop) will have varying behavior (e.g. 
direct prop read vs. getter call) *depending on the call stack*.


* Giving issetter/unsetter no direct access to the property limits functionality and leads 
to weirdness like the example above.



Steve Clay
--
http://www.mrclay.org/

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP-DEV] [VOTE] Property Accessors for 5.5

2013-01-17 Thread Clint Priest


On 1/17/2013 4:24 PM, Steve Clay wrote:

 https://wiki.php.net/rfc/propertygetsetsyntax-v1.2#voting

I'll say my peace on this. This is a very good implementation, and as 
long as authors use accessors that depend on a separate property for 
storage (like other langs require), everything will be 
straightforward. Otherwise, I fear they're in for some confusing 
behavior.


Consider the code from the RFC:

class TimePeriod {
public $Hours {
get { return $this-Hours ?: not specified; }
set { $this-Hours = $value; }
}
}

$tp = new TimePeriod();
$tp-Hours; // not specified
isset($tp-Hours); // true!?


$tp-Hours isset, the property exists and it's value is non-null.

The auto implementation of isset compares $this-Hours to NULL, but 
since $this-Hours goes through the getter, it will return not 
specified. So the property will always appear to be isset.


* The guards seem spooky: A set of tokens ($this-prop) will have 
varying behavior (e.g. direct prop read vs. getter call) *depending on 
the call stack*.
This is the same as would occur with isset against an undefined 
property, that would call __isset(), followed by __get() which would 
then compare the value to NULL.


* Giving issetter/unsetter no direct access to the property limits 
functionality and leads to weirdness like the example above.


This is possible, simply by supplying your own implementation of 
isset/unset that calls isset/unset, such as:


public $foo {
get; set;
isset { return isset($this-foo); }
unset { unset($this-foo); }
}

The above five lines of code is exactly equivalent in functionality to:

public $foo;

-Clint

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php