On 28 January 2016 at 19:17, Lorenzo Fontana <fontanalor...@gmail.com> wrote:
> Hello everybody!

Hello Lorenzo,


> If *$result* is *null* the output of *get_class* is the name of the
> containing class instead of the name of the object I wanted.

Yes, that is bad. Perhaps a smaller change would give you the desired
behaviour though?

If we just give a warning/error if any non-object type is passed as
the parameter, that would achieve what you want wouldn't it? And it
provides a slightly easier 'upgrade' path for people who, for whatever
reason, are currently passing null to it.

> the name of the containing class can be easily obtained via *__CLASS__
> or via get_class($this)* or via *get_called_class()

The first two can't be used directly as a callable, and so can't be
passed around as a function. And get_called_class() returns the late
static binding class.

So if the smaller change of just giving a warning/error on any
non-object as a parameter gives the desired result, I would recommend
doing just that. It might even be possible to do it as a bug fix...

cheers
Dan

## Refactoring if non-objects are no longer allowed.

Current code:
echo get_class($result);

Would need to be changed to:

if ($result === null) {
    echo get_class();
}
else {
echo get_class($result);
}

## get_called_class is late static binding.

class foo {
    static function bar() {
        //return $fn(null);
        echo get_class()."\n";
        echo get_called_class()."\n";
    }
}

class Quux extends foo { }

Quux::bar();

// Output is:
// foo
// Quux


## Callables can passed around

class foo {
    public static function bar(callable $fn) {
        return $fn();
    }
}

echo foo::bar('get_class');

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

Reply via email to