Just a thought that crossed my mind which might satisfy both worlds.  Has
anyone every considered unions as a type declaration?

namespace Vector/TypeDefs

union Stringable
{
    as string;
    as int;
    as float;

    private $value;

    public function __make($type)
    {
        switch (type) {
            case 'string': return (string) $this->value;
            case 'int':    return (int)    $this->value;
            case 'float':  return (float)  $this->value;
        }
    }
}

my_echo_func("123"); // << A scalar variable on the outside.

function my_echo_func(Stringable $stringable) // << a union on the inside
{
    var_dump($stringable as string); // string(3) "123"
    var_dump($stringable as int);   // int(123)
    var_dump($stringable as float);  // float(123.0)
}

Perhaps not exactly like this, but adding unions as type of class
declaration should save a hell of a lot of keywords, and may save a number
of "instanceof" type checks as well.

On 20 April 2016 at 20:55, Fleshgrinder <p...@fleshgrinder.com> wrote:

> I am not quoting anything because the formatting of your emails is
> completely off in Thunderbird. However, I want to add one to the list:
>
> declare(strict_types=1);
>
> interface Stringable {
>     function __toString(): string;
> }
>
> function fn(string|Stringable $arg) {
>     $param = (string) $arg;
> }
>
> We could add a new *stringable* primitive to PHP though, but do we guys
> really want to start doing so? There is pretty much an endless amount of
> combinations and finding names alone is endlessly hard.
>
> declare(strict_types=1);
>
> function fn(int|string $maybe_bigint) {
>     // mysqlnd automatically creates the proper type based on the value.
>     // Expressing this in userland is impossible ... :(
> }
>
> --
> Richard "Fleshgrinder" Fussenegger
>
>

Reply via email to