2016-01-29 0:22 GMT+01:00 Lorenzo Fontana <fontanalor...@gmail.com>:

> 2016-01-28 23:35 GMT+01:00 Dan Ackroyd <dan...@basereality.com>:
>
>> 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');
>>
>
>
> 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.
>
>
>
>
> Yes is what I would like to do, start saying people that they should
> change that by triggering a deprecation notice so they can refactor their
> code.
>
>
> 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.
>
>
> I don't see any way to get the declaring class passing a callable as you
> pointed out in the following code if not using *get_class* without
> parameters. Any idea?
>
>>
>> class foo {
>>     public static function bar(callable $fn) {
>>         return $fn();
>>     }
>> }
>> echo foo::bar('get_class');
>
>
>
> Thanks,
> Lorenzo
>
>
>

Another way  to obtain the declaring class in static methods but it's not a
callable is the use of *self::class*




*class foo {    static function bar() {        echo self::class."\n";
  echo get_called_class()."\n";    }}class Quux extends foo {
}Quux::bar();// Output is:// foo// Quux*

Reply via email to