On Tue, Feb 7, 2023 at 10:21 PM Mark Baker <m...@demon-angel.eu> wrote:

> On 07/02/2023 20:53, Olle Härstedt wrote:
> > No not really. I'd expect it behave similar to function argument
> > type-hinting in PHP, that is, runtime checks, but where the notation
> > can be used by external tools.
>
> The big difference is that the current checking for function arguments
> is only necessary when a function is called; but that checking for
> local-scoped variables would be required on every assignment to a
> variable, or operation that can change a variable value; and that
> becomes more problematic with the potential need for union types.
>
>
Hi Mark,

I saw that you and Olle were discussing that type checking should be
similar with functions typed parameters .
But in reality, it should be implemented more like typed properties.

Actually that's already possible with something like https://3v4l.org/T6GFS
function &declare_int(int $value) {
    static $references = [];

    $valueWrapper = new class(5) {
        public function __construct(public int $value) {
        }
    };
    $references[] = $valueWrapper;

    return $valueWrapper->value;
}

$intVariable = &declare_int(0);

$intVariable = 42; // works
$intVariable = 'test'; // fails


Even the PHP_INT_MAX works (it fails).

To give credit, I saw it discussed few years ago on twitter and here you
can see a nice playground implementation: https://github.com/azjezz/typed/
I don't see a bug technical performance downside, other than the wrapper
class references that you need to have a management for.
I think an implementation in C would be not less performant than how
properties types are checked.

Regards,
Alex

Reply via email to