On 3/31/16 8:01 AM, Zeev Suraski wrote:

-----Original Message-----
From: Joe Watkins [mailto:pthre...@pthreads.org]
Sent: Thursday, March 31, 2016 3:41 PM
To: Dmitry Stogov <dmi...@zend.com>
Cc: Björn Larsson <bjorn.x.lars...@telia.com>; Phil Sturgeon
<pjsturg...@gmail.com>; Krakjo <krak...@php.net>; PHP internals
<internals@lists.php.net>
Subject: Re: [PHP-DEV] [RFC Discussion] Typed Properties

Morning Dmitry,

This should be a error. I also think, that "public" might be omitted,
and it should be possible to write "int $bar, $foo"
Omitting public might be nice, but also totally separate, you should be able to
omit it for untyped properties too.

You say - C, C++, Java, HHVM, etc - all made worse decision? OK
No. C, C++, C#, and Java had a different decision to make.
I don't think the decision is fundamentally different.  It's fundamentally very 
similar if not identical.

[public] int foo, bar;

It is obvious that bar is an int in any of those languages precisely because it
necessarily has a type.

Why we should jump to the same conclusion, in a system where properties do
not necessarily have types is not clear to me.
Because we're dealing with a single statement, and we already have the concept 
that a modifier for that statement is enforced throughout the statement - I 
don't see how whether that modifier is mandatory or not makes any meaningful 
difference.  Having an access modifier affect the entire statement, while a 
type modifier affecting only the variable next to it - is extremely 
inconsistent.

If

Private Person $p, Car $c;

works, why shouldn't:
Private Person $p, public Car $c;

Work as well?

In addition to being inconsistent, it also calls for poor coding practices - 
mixing typed and untyped declarations in a single statement - as well as 
different types in a single declaration.  In that context, what drove other 
languages to pick their syntax and force developers to separate declaration of 
different variables types into different statements - applies exactly in the 
same manner for all other languages, us included.

Zeev

Honestly I never even realized that you could put multiple declarations on a single line, have never done so, and would reject code from any of my projects that did so as poor style. :-) That said, since it is legal I agree that it should be kept unambiguous and consistent.

From what Zeev is saying, the following seems like a reasonable rule: You get ONE visibility modifier and ONE type statement per declaration, and both must come at the beginning, period. That is, the following are legal:

public int $a, $b;
protected $a, $b;
var int $a, $b;

And always apply across the entire line, period.

The following are all syntax errors:

public int $a, string $b;
var int $a, protected $b;
private $a, float $b;

That seems fairly easy for a reader to follow, reasonably consistent, and I presume straightforward to implement (not being a C developer I hand-wave that part...). If you want to do something more complex... make it multiple statements. That's why multiple statements exist.

Zeev, is that an accurate summary of what you're arguing?

--
--Larry Garfield


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

Reply via email to