Помогите с static :: $ value - PullRequest
0 голосов
/ 04 мая 2011

Я часто видел, как это происходит, я думаю, что это связано с поздним статическим связыванием, но какой смысл делать это таким образом.

class {
    public static $name = array();

    function something() {
        static::$name;
    }
}

сверх

class {
    public static $name = array();

    function something() {
        self::$name;
    }
}

Ответы [ 2 ]

2 голосов
/ 04 мая 2011

self::$name в родительском классе будет всегда ссылаться на свойство родительского класса, тогда как static::$name в родительском классе будет ссылаться на свойство класса времени выполнения.

Например

class A
{
    protected static $foo = 'foo';

    public static function getSelfFoo()
    {
        return self::$foo;
    }

    public static function getStaticFoo()
    {
        return static::$foo;
    }
}

class B extends A
{
    protected static $foo = 'bar';
}

echo A::getSelfFoo(); // 'foo'
echo A::getStaticFoo(); // 'foo'

echo B::getSelfFoo(); // 'foo'
echo B::getStaticFoo(); // 'bar'
0 голосов
/ 04 мая 2011

Имеет значение, если вы создаете подкласс вашего класса. В первом примере функция something будет ссылаться на переменную $name в подклассе. Во втором примере он будет ссылаться на переменную $name в базовом классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...