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]

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

Reply via email to