On 27 April 2015 at 19:39, Rowan Collins <rowan.coll...@gmail.com> wrote:

> Marco Pivetta wrote on 27/04/2015 18:25:
>
>> On 27 April 2015 at 16:35, Anthony Ferrara <ircmax...@gmail.com> wrote:
>>
>>  On Mon, Apr 27, 2015 at 7:18 AM, S.A.N <ua.san.a...@gmail.com> wrote:
>>>
>>>> Now this code causes an error PHP 5-7.
>>>>
>>>> PHP Parse:
>>>> Syntax error, unexpected 'class' (T_CLASS), expecting identifier
>>>> (T_STRING) or variable (T_VARIABLE) or '{' or '$'
>>>>
>>>> Do not want to use get_class($object)
>>>>
>>> Why not?
>>>
>>> Seriously, why not? ::class was added because there was no easy way to
>>> get from the symbol class name to the string representation of it (you
>>> couldn't pass it to a function, etc since it would look like a
>>> constant). So ::class is a purely compile time construct to turn a
>>> literal classname into a string representation.
>>>
>>
>> Mainly due to overhead.
>>
>> Having `::class` accessible even for objects and variables containing
>> class
>> names would be very efficient, as it saves us a method call for an
>> operation that really doesn't need one.
>>
>
> The overhead of function calls comes up a lot, and it strikes me that
> optimising calls to built-in functions *as a category* would be better than
> piling more special case syntax into the engine for every use case.
>

Yes, it could be done indeed.

Presumably, $foo::class will never be as fast as Foo::class anyway, because
> the latter can happen *at compile time*, since it needs only follow the
> namespace resolution for class name "Foo" within the current file/block,
> thus having effectively zero overhead once cached.
>

It will never be, but still, following works, and that means that we have
some sort of inconsistency: http://3v4l.org/napVW

Marco Pivetta

http://twitter.com/Ocramius

http://ocramius.github.com/

Reply via email to