Dan Ackroyd <dan...@basereality.com> wrote:
>
> I'm guessing you don't actually have ths function getIntOrNull() in
> your code-base? To help me understand where this would be useful,
> could you provide some 'real-world' code where this would be useful?

Hello, thanks for digging in :)

Here's a "real-world" situation I happened to come across (*NOTE:
simplified for sanity*):

vendor/bar/api/src/Dest.php (code we don't own):

    <?php
    namespace Bar\Api;
    interface Dest {
        public function send(?string $reference, string $label, /* ... */);
    }

vendor/foo/api/src/Source.php (code we can't modify either):

    <?php
    namespace Foo\Api;
    interface Source {
        public function getNumber(): ?int;
        public function getName(): string;
        /* ... */
    }

src/Service.php (our code):

    <?php
    declare(strict_types=1); // FIXME
    namespace App;
    use Bar\Api\Dest;
    use Foo\Api\Source;
    class Service {
        public function action(Dest $dest, Source $source) {
            $dest->send(/* FIXME */ $source->getNumber(),
$source->getName(), /* ... */);
        }
    }

As you can see, it's actually pretty close to the RFC example; I'm not
sure it's worth to add complexity...

> But please can you post the actual use-case you _need_ this for. Or
> possibly update the RFC with that example. Currently, imo, the RFC is
> just presenting an alternative syntax for something that is not 100%
> needed.

You have a point, but all the current alternatives I can think of
(namely: use a ternary (or an `if`), possibly with a temporary
variable; write (and autoload) custom casting functions; or give up on
strict typing) suffer one or more of the following downsides:
  - increased risk of mistakes
  - verbosity / more maintenance
  - performance overhead

> I do kind of like the idea in the RFC, but I think it needs a better
> argument for it.

For your other points, I find that Claude Pache has given pretty good
arguments in the meantime (thanks!) =) (By the way, I also thought
about say, "nullable_intval()", "nullable_strval()" etc. but we're
missing "arrayval()" and "objectval()"...)

Best regards,

--
Guilliam Xavier

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

Reply via email to