i may be jumping into the end of a resolved discussion, but i'm new in the
group and am looking for opportunities to offer my experiences to the
PSR-12 review process.
*Re: properties first*
i fully support adding a recommendation to define all constants,
properties, and methods declared with their own kind (preferably in the
order listed). i can't recall ever finding a class that was more
understandable by defining a property near its "relevant" functions midway
down a class. If the point of a class-level member is to be accessible
*anywhere* in the class, and for accessible members to be
extensible/overridden by descendants, then organization is important. The
use case specifies private properties, but i don't see the justification.
If a descendant class needs to override the ancestor with its own private
properties, there's an expectation set by the ancestor to define those
properties in relatively close position to the original.
Shorter version: it would seem more appropriate that if a property
"belongs" to only a limited scope of functions, they should be extracted to
a separate structure (Trait or abstract class) and incorporated into the
class that would use them.
i find it much cleaner to keep like-things together, and use PHPDoc
comments with "*@see*" references if the member is designed for a narrow,
limited purpose. My team's style guide requires not only member grouping,
but grouping by modifier signature as well.
*Re: 4.5 return type colon spaces...*
Just to be a fly in the ointment, the argument that natural languages do
one thing and code should follow suit could be used to support
public function foo ($bar, $baz)
// and
$this->foo ($bar, $baz);
over the prescribed
public function foo($bar, $baz)
// and
$this->foo($bar, $baz);
since most natural languages place a space before a parenthetical
expression. Granted, the call format that includes a space looks silly, but
it's legal and follows natural language. As such, i can see the contention
that there's inconsistency to require removal the space before a ":"
operator or to require collapsing white space inside declare(strict_types=1)
.
Spaces, in fact, have the appearance of several inconsistencies,
particularly to potential new PHP coders:
1. Name function declaration: no space between name and "("
2. Anonymous function declaration: space between "function" and "(" -
seems to contradict #1.
3. All non-unary operators: space on either side of the operator.
4. Return type operator: space after colon, not before - seems to
contradict #3.
5. Nullable argument / nullable return type: no space between "?" and
type - seems to contradict #3.
6. Cast expressions like (int) '123': no mention (follow #3, or is
(int)'123' acceptable?)
7. Declare strict types: no spaces at all, despite appearance as a
"function" call (similar to *list()* or *isset()*) and an assignment
operator. Seems to contradict #3.
8. Spread/splat: no mention at all. Madness! ;-)
i realize a lot of these rules have been around for a long time, and come
from surveys of programmers far more experienced than myself. But my
understanding is part of the drive behind this updated PSR is to reexamine
the existing guide and expand for new language features. Perhaps i'm
mistaken. i have no strong opinion about where spaces are included or
omitted, as long as they're done consistently, or at *least* with some
justification for the rule. Simply saying "MUST" doesn't really help to
explain *why* that's the recommended style. And as someone who has to
convince a team of programmers to comply with style rules they will have to
adapt to, justification goes a long way.
Okay, went a lot further with that than intended. Sorry.
Lastly, "splat/spread" *was* the best operator name until spaceship <=>, in
my opinion. ;-) But splat is WAY more useful.
Thanks for the opportunity. Hope i haven't overstepped boundaries as a
newcomer...
-jlt
On Monday, 11 December 2017 03:30:21 UTC-5, Alexander Makarov wrote:
>
> Thank you for the input. Meta should be definitely fixed. Some other
> comments:
>
>
>> * Related: Technically I see nothing that mandates properties-first, then
>> methods. That's virtually universal from what I've seen, though. Should
>> that
>> be included in class organization?
>
>
> Generally it's true but there are exceptions. Private properties intended
> for caching object instances are kept close to methods in many libraries
> I've seen and I can't say it's a bad practice. In fact, it makes it easier
> to read such code.
>
> 4.5:
>> * I still hold that "function foo(): string" is silly and the colon
>> should
>> have spaces on either side. This feels like an entirely unnecessary
>> inconsistency.
>
>
> That would be very unnatural since in most natural languages there's no
> space before ":" and a space after ":".
>
> * "we have taken a more prescriptive approach and defined the standards
>> for new
>> language features as they are released" - eh, I know that was the intent,
>> but
>> is that still true, given how long PSR-12 has been in progress?
>
>
> It is. Standards were mostly defined at that time. Then there was a period
> of validation with surveys.
>
>
> On Monday, December 11, 2017 at 12:00:48 AM UTC+3, Larry Garfield wrote:
>>
>> *Puts on CC member hat*
>>
>> 4.2:
>> * Regarding trait whitespacing, it feels incomplete. Like, class bodies
>> should get the same "set of blocks with one line separating them"
>> treatment as
>> the file header does. That would effectively expand to one line between
>> methods, and between the properties, too. I don't know if that's scope
>> creep
>> but as is it feels lacking and incomplete.
>>
>> * Related: Technically I see nothing that mandates properties-first, then
>> methods. That's virtually universal from what I've seen, though. Should
>> that
>> be included in class organization?
>>
>> 4.5:
>> * I still hold that "function foo(): string" is silly and the colon
>> should
>> have spaces on either side. This feels like an entirely unnecessary
>> inconsistency.
>>
>> 8:
>> * I know it's unresolvable without breaking the most controversial part
>> of
>> PSR-2, but I am just going to call out the inconsistency in anonymous
>> classes
>> between closures and explicit classes. That's messy.
>>
>> Metadoc:
>>
>> 2:
>> * "PHP-FIG" is usually hyphenated, although Secretaries, please decide on
>> which the proper spelling is. :-)
>>
>> * "we have taken a more prescriptive approach and defined the standards
>> for new
>> language features as they are released" - eh, I know that was the intent,
>> but
>> is that still true, given how long PSR-12 has been in progress?
>>
>> * " it will have a better chance of being adopted but this is in the hope
>> that
>> it will mean that projects." - That sentence is grammatically
>> incomprehensible
>> and ends in the middle so I have no idea what it's saying.
>>
>> 3.1:
>> * PHP 7.1 and 7.2 should be mentioned, since there is mention of 7.1
>> syntax.
>> (I don't know that 7.2 has any new syntax we should care about.)
>>
>> 4.4:
>> * The description here of the vote, IIRC, is rather misleading. It
>> wasn't a
>> "do you like this", but a "do you have a really really good reason to not
>> do
>> it the way we've already written?" That's why the votes are so
>> dramatically
>> biased in favor of the status quo: The survey specifically said to bias
>> that
>> direction. The survey should be accurately described or omitted. As is,
>> it
>> is misleading and false.
>>
>> 4.5:
>> * Typo, there's an extra ] in the text.
>>
>> 6:
>> * No need to bold names. I don't think any other specs do.
>>
>> 7:
>> * Formatting error on "Entrance Vote".
>>
>> Generally:
>> * notice there's no mention of variadics. Was that deliberate? If the
>> goal
>> is to cover "language features that didn't exist in 5.3 when PSR-2 was
>> written", variadics and the splat operator (which is still the coolest
>> named
>> operator ever) seem like something that should be covered.
>>
>>
--
You received this message because you are subscribed to the Google Groups "PHP
Framework Interoperability Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/php-fig/021a8302-3231-4789-9dcb-957a1aa4a537%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.