Помощь со статическим :: $ значением

#php #static #php-5.3

#php #статический #php-5.3

Вопрос:

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

 class {
    public static $name = array();

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

более

 class {
    public static $name = array();

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

Ответ №1:

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'
  

Комментарии:

1. Спасибо Филу, который помог, так плохо ли использовать static::$name, даже если у класса никогда не будет дочернего элемента??

2. @ChrisR Нет. Использование static or self будет полностью зависеть от того, как вы хотите получить доступ к свойству или методу

Ответ №2:

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