On Thu, Jun 20, 2024 at 11:54 PM Rowan Tommins [IMSoP] <imsop....@rwec.co.uk>
wrote:

> On 19/06/2024 16:34, Larry Garfield wrote:
>
> Also, as someone who does put every file into strict mode as a matter of
>  course, and appreciates the many languages that do not even have a
> concept of non-strict mode (like Go or Rust), I really don't appreciate
> the backhanded comments in this thread about people who, you know, care
> about type safety.  (Something that weak mode, when it was introduced in
>  PHP 7, only marginally provided if at all.)  Strict mode prevents bugs,
>  full stop, and we should not fault anyone for applying that bug-stopper
>  tool liberally.
>
>
>
Hey Rowan,

What Gina, Larry and Sebastian said.

My $0.02 is

1. typing "declare(strict_types=1);" is already cumbersome enough, we don't
need to be adding more words and complexity to it

2. adding the word "coerce" or "coercion" to a thing is really not good
from a DX (developer experience) perspective. It will not add clarity it
will add *confusion*... "What is this coersion thing I've never heard of"

3. remember who the target audience is.. Rust and Golang are not
beginner-friendly or entry-level languages, so the fact you're even using
Rust means you know what you're doing and likely know what coersion is

3.1 PHP's strength is that it's beginner friendly and by that I mean just
remember a significant portion of our userbase are Wordpress developers
(and Drupal / Magento alike) .. and many WP devs won't have even heard of
Dependency Injection before nevermind the complexities of type coersion, so
we need to keep things *simple as possible* at all times

4. I think the solution you're looking here for is better *education* to
the end-users, on what the implications of X or Y are .. rather than
changing the language itself .. so the merits of your proposal are good, in
that it helps the end-user understand the system better .. it's just the
solution you're proposing here just isn't it (so far).



Used correctly, it absolutely does. Used incorrectly, it can actually end
> up *hiding* errors.
>
> I've seen lots of cases where code like this:
>
> some_function_expecting_int($_GET['foo']);
>
> Gets changed to this:
>
> declare(strict_types=1);
> some_function_expecting_int( (int)$_GET['foo'] );
>
> Even in PHP 7.0, the first version is actually *stricter* than the second,
> because explicit casts never fail, but parameter coercion (mode 0) always
> failed for strings like "hello"; as of 8.0, it also fails for strings like
> "123foo" and "".
>
> And this is exactly the kind of code that coercive type hints were
> intended for - HTTP is a text-based protocol, so most PHP applications are
> dealing with string input and output *all the time*.
>
> One of the things the language badly needs, and I have been trying to come
> up with a proposal for, is strict type casts, so that this code can
> actually be written safely but still concisely.
>
>
> Regards,
>
> --
> Rowan Tommins
> [IMSoP]
>
>

Reply via email to