Хорошо, название трудно понять, но я пытался понять о поздней статической привязке, и я увидел этот ответ https://stackoverflow.com/a/35577069/1640606
Который показывает разницу между этими двумя примерами:
Заметка, самостоятельно :: $ с
class A
{
static $c = 7;
public static function getVal()
{
return self::$c;
}
}
class B extends A
{
static $c = 8;
}
B::getVal(); // 7
Позднее статическое связывание, примечание Статическая :: $ с
class A
{
static $c = 7;
public static function getVal()
{
return static::$c;
}
}
class B extends A
{
static $c = 8;
}
B::getVal(); // 8
Теперь я понимаю это, но я не понимаю, почему B::getVal(); // 8
сначала получает getVal
из класса A
, но, кажется, получить значение, определенное в классе B
,
Таким образом, « B :: getVal (); `получает метод класса, но значение второго класса. Мой вопрос заключается в том, является ли это истинной предполагаемой целью позднего статического связывания и что это помогает решить
Пример 1:
class A
{
static $c = 7;
public static function getVal()
{
return self::$c;
}
}
class B extends A
{
static $c = 8;
}
B::getVal(); // 7
В Примере 1 он возвращает вам 7, потому что, когда вы вызываете getVal
функция на B
тогда PHP находит свое объявление в родительском классе, который возвращает значение $c
из текущего класса с использованием оператора self
,
Пример 2:
class A
{
static $c = 7;
public static function getVal()
{
return static::$c;
}
}
class B extends A
{
static $c = 8;
}
B::getVal(); // 8
Но в примере 2, когда вы вызываете getVal
затем php снова находит свое объявление в родительском классе, но класс возвращается return static::$c
что означает возвращение значения переменной класса, из которой она вызывается.
Других решений пока нет …