Re: Request Feedback for Instance Variable Sugar RFC

From: Date: Wed, 11 Mar 2015 16:21:18 +0000
Subject: Re: Request Feedback for Instance Variable Sugar RFC
References: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15  Groups: php.internals 
Request: Send a blank email to internals+get-84554@lists.php.net to get a copy of this message
Johannes Ott wrote on 11/03/2015 13:36:
Am 11.03.2015 um 14:03 schrieb Rowan Collins:
Johannes Ott wrote on 10/03/2015 20:46:
okay indeed the dynamic properties are a problem I didn't think about on my suggestion. Without the wish to hijack this thread for another typesafety discussion, I must say again that PHP needs a less dynamic and more declaratively properties concept in my opinion.
Yes, I think a standard way to say that a particular object has strictly declared all its properties, and should not allow would be useful. (Even with that, though, I'd be against guessing that "$foo" meant "$this->foo"; it just makes code harder to read.)
I disagree, programming Java beside PHP since about 15 years now, personally I think always having "this"-keyword, where it is not necassary in a strict OOP-world, makes the code more unreadable for the simple fact it is more to read.
My reasoning is that code that is ambiguous is hard to read. If "$foo" can mean either "a local variable called $foo" or "a property of the current object called $foo", then you have to know which it is in order to understand what code is doing. This is not about "a strict OOP-world", incidentally, it's about scoping rules. Java imports object properties into the scope of each method, PHP does not. Even if properties had to be declared (which is probably a good idea), local variables still wouldn't be - in Java, the fact that it's not declared locally means it *must* be coming from somewhere else. I also know that when I was first learning Java at school, it confused me immensely which variables I was allowed to access in static contexts. In PHP, that's simple - if you can't access $this, you can't access any of it's properties.
So I would suggest for now to keep the $this variable, but to make it more similar to other OOP-languages I would suggest to remove the $-character in front. In my opinion it would fit better to other object keywords like parent and self as well.
Other OOP languages only don't have a sigil such as $ in front of this if they don't have one in front of *any* variable. Why should $this, which acts like a normal variable in pretty much every way, drop the $ when every other variable in the language has one? Note that the syntax of parent and self is different, and is consistent with static member/method access, or more strictly "scope resolution". You can't pass parent or self around as variables, only use them to resolve scopes, so they don't have a $.
I only agree a bit, because the keyword "this", is what to call a hybridization, more often used to define the scope of the property or method you want to use, then used really as a pure variable. For example: this->a; or this->some_function(...); just defining the scope as in the current instance is much more used then. some_function($this);
This is true of any object variable. These resolve the scope of the property/method to the variable $foo: $a = $foo->a; $foo->some_function(...); These resolve the scope of the property/method to the variable $this: $a = $this->a; $this->some_function(...); If you want to resolve the scope of a method to the current object without using the variable $this, you can also use the "static" keyword; these are equivalent: $this->some_function(...); static::some_function(...); // http://3v4l.org/E0XYs There is nothing unvariable-like about $this, so if variables begin with $, $this should begin with $. Regards, -- Rowan Collins [IMSoP]

« previous php.internals (#84554) next »