> On Mar 24, 2021, at 11:22 PM, Levi Morrison via internals 
> <internals@lists.php.net> wrote:
> 
> On Wed, Mar 24, 2021 at 8:02 PM Mike Schinkel <m...@newclarity.net> wrote:
>> 
>>> On Mar 24, 2021, at 8:39 PM, Larry Garfield <la...@garfieldtech.com> wrote:
>>> 
>>> As requested, splitting off the short-functions RFC to its own thread.
>>> 
>>> https://wiki.php.net/rfc/short-functions
>>> 
>>> In response to the feedback that the savings in typing volume is small, 
>>> that's true but also not the main point.  The main point is to allow and 
>>> encourage functions to be written an in "expression style", that is, as 
>>> actual functions and not procedures.  As the RFC notes, such use cases are 
>>> increasing, and is likely to increase in PHP, and that's overall a good 
>>> thing for the language.  It fits well with a number of recent RFCs both 
>>> passed and proposed, and makes writing functional-style code much more 
>>> natural.
>> 
>> I like it.
>> 
>> I hope this passes, and would vote for it if I had a vote.
>> 
>> -Mike
>> 
>> P.S. I do find myself lamenting that while this FRC makes code more concise 
>> it does not do anything to reduce the (IMO overly) verbose nature of method 
>> declarations that require both a visibility modifier and the function 
>> keyword. And while I know you just stated that conciseness in not a main 
>> goal, it is still a benefit of this proposal.
>> 
>> It would be much nicer if we could indicate in fewer characters what the 
>> visibility modifier and the function keyword currently denote. Yes, that 
>> could be addressed in another RFC, but it could also be addressed in this 
>> one — assuming there was a will do to so — so now felt like a good a time as 
>> any to bring it up.
>> 
>> Assuming others besides just me would like to see function signatures be 
>> made less verbose and would like to see some proposed alternatives, please 
>> ask and I will happily follow up with some ideas.
> 
> Drop "public", as it is unnecessary. I never understood why
> PSR-whatever decided to always require it, when not all projects
> agreed on that, and there are actual arguments to put it only when
> overriding visibility (you see it only when it matters).

I have always understood the reason for `public` was that specifying it 
indicates that the developer was making an explicit statement about visibility. 
Of course with many developer's propensity for copy-paste and code generation, 
I am not sure that argument is as sound as it might first appear.

I can think of two (2) approaches to minimize verbosity and address visibility 
here.  Consider this code:

class Product {
   private Product $parent;
   private string $name;
   private int $counter;
   public function getName():string { return $this->name; }
   protected function getParent():Product { return $this->parent; }
   private function getCounter():int { return $this->counter; }
}

The first approach would be to make the use of the "function" keyword 
*optional* because, unless I am wrong, it should be unambiguous from a parser 
perspective:

class Product {
   private Product $parent;
   private string     $name;
   private int          $counter;
   public getName():string           => $this->name; 
   protected getParent():Product => $this->parent;
   private getCounter():int           => $this->counter; 
}

The second approach — which I would much prefer, but I doubt many others in the 
PHP world will — is to use a "method" keyword and to draw inspiration from 
GoLang regarding visibility where leading uppercase method names are public, 
leading lowercase names are protected, and leading underscore names are 
private.  

class Product {
   property Product $_parent;
   property string     $_name;
   property int          $_counter;
   method GetName():string     => $this->_name; 
   method getParent():Product => $this->_parent;
   method _getCounter():int     => $this->_counter; 
}

We could also do the same thing with properties by introducing a "property" 
keyword, but I digress as shown in the second approach, but I digress...

Anyway, both of these two approaches would be backward compatible I think — 
except the syntax of the second approach would not allow for revising existing 
classes to the new syntax without also updating their calling code — but IMO 
either would be a nice addition to the short function RFC, or possibly an RFC 
of its own assuming there were enough others who would like to see the same?

> Anyway, it's
> not that important, as I don't have to do what PSR-whatever decided.
> Instead of writing this:
> 
> ```
> class A
> {
>  public function method($arg1)
>  {
>    return expr($arg1);
>  }
> }
> ```
> 
> I can write this:
> 
> ```
> class A {
>  function method($arg1) { return expr($arg1); }
> }
> ```

Honestly, I always omit "public" whenever I have the choice, too.

But there is always a lot of "other-people's code" to read and understand, much 
of which uses PSR-12.

If there were a better syntax for visibility — such as proposed above — then 
maybe a revised PSR could be released to recognize the newer syntax?

> To be quite honest, I like putting statements on a single line as long
> as they fit in whatever column limit the project uses. My
> .clang-format has been doing this for my C code and I've grown quite
> fond of it; there is real value in seeing more actual code on a page
> at a time, and I don't feel like it's too cramped.

Yes, I'd like to see more code on the page too!  But I would also like more 
whitespace so that there will be less of the non-whitespace to have to mentally 
process.

-Mike

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

Reply via email to