> On Sep 4, 2024, at 16:45, Rob Landers <rob@bottled.codes> wrote:
> 
> I think, conceptually, this makes sense, but maybe I'm the only one who writes
> 
> $arr = doSomething();
> $arr = array_map(fn($x) => $x->prop, $arr);
> $arr = array_filter($arr, $filterFunc);
> 
> instead of
> 
> $arr = array_filter(array_map(fn($x) => $x->prop, doSomething()), 
> $filterFunc);

IMO, that's a failing of PHP not supporting object syntax (and reasonable api) 
for non-object values. In other languages, I can write code such as:

let arr = doSomething()
    .map { $0.prop }
    .filter(filterFunc)

Which is more readable than both PHP versions.


> And I feel like having constant variables would result in more of the latter, 
> which I feel is more unreadable. Though I do note that my opinion of what is 
> readable might be different from other people's.
> 
> That being said, I would much rather see block-scoped variables than local 
> variables via let or var or something:
> 
> var $aNumber = 12;
> 
> foreach($arr as var $item) {
>   echo $item; // item exists here
> }
> 
> echo $item; // item doesn't exist here
> 
> PHP is simply too verbose to really benefit from local constants, but would 
> benefit from block-scope far more. For example, with local constants, you 
> couldn't write that foreach because that variable exists in the scope of the 
> function and can only be defined once.
> 
> — Rob

I'd suggest that the foreach could be written with either of let/var to both 
locally scope $item, which would explicitly disallow/allow $item to be changed 
while in the loop.

Another benefit of local constants is preventing accidentally reusing a prior 
variable. For example, if I set a temporary variable to something, and then 
later in the function, reuse that same name for a new temporary but don't set 
the value on all flow paths, then the value from earlier in the function leaks 
through, whereas either using a constant, or a second explicit variable 
definition would have exposed and/or prevented the issue.

-John

Reply via email to