#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
orself
будет полностью зависеть от того, как вы хотите получить доступ к свойству или методу
Ответ №2:
Важно, создаете ли вы подкласс своего класса. В вашем первом примере something
функция будет ссылаться на $name
переменную подкласса. В вашем втором примере это будет ссылаться на $name
переменную базового класса.