Re: Late static binding behaves differently in PHP 5.3 and PHP 5.4

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Keven,

First, I don't see any late static binding being used here. LSB only
applies when you access a static member using the static keyword within a
class method. This code uses static properties but accesses them directly
without going through class methods. Here's an example of LSB:

    class Foo
    {
        static $my_var = 'The Foo';

        static function dump() {
            echo static::$my_var . "\n";    // Use Foo's or Bar's depending
on what appears before ::dump()
        }
    }

    class Bar extends Foo
    {
        static $my_var = 'The Bar';
    }

    Bar::dump();    // The Bar
    Foo::dump();    // The Foo

Here Foo::dump() uses LSB to pick the source of $my_var.

That being said, what you're seeing does look like a change (or bug) in how
PHP accesses constants. Given that it is order-dependent, my guess is that
5.4 introduced a bug that causes Bar to push its constant up into Foo. The
strange thing is that the constant is compiled into the class, and since
Bar extends Foo I would expect Foo to be compiled first regardless of the
order in which you access the static variable later.

David

[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux