On Mon, Jun 24, 2024 at 7:04 AM Hendra Gunawan <the.liquid.me...@gmail.com> wrote: > > I agree that this proposal should be proposed as a whole. If we break > it down into smaller parts, there is a chance some features will not > pass.
This is exactly my concern and I fear we will be dealing with the repercussions of a non-well-thought-out sub-feature for years to come. Why does `new Pattern()` have the ability to accept patterns as a parameter? Can other code do that as well? Why is @($thing) a thing? @ is already an operator so seeing it used like this is strange. Same with ~ . It's also weird to see `?` on the left hand side of a literal. PHP already has variable-variables, so use those instead of @(): $foo is $$mypattern. There's no need to use `?` to check for existence on a key, so this: $arr is ['a' => string, ?'b' => string, ...]; should be this: $arr is ['a' => string, 'b' => ?string, ...]; because $arr['non-existent-key'] is NULL. ~ has no meaning in mode 0, only in strict mode, but will force people in mode 0 to work like they are in strict mode or litter their code with ~'s. PHP is duck-typed and making it act like it isn't is just bad DX. Further, it isn't clear how it will affect literals since it is also bitwise-not.