Почему в позднем статическом связывании дочерний класс получает данные из родительского и текущего методов

Хорошо, название трудно понять, но я пытался понять о поздней статической привязке, и я увидел этот ответ 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 (); `получает метод класса, но значение второго класса. Мой вопрос заключается в том, является ли это истинной предполагаемой целью позднего статического связывания и что это помогает решить

0

Решение

Пример 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 что означает возвращение значения переменной класса, из которой она вызывается.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]