Код здесь:
class A {
public static $property = 1;
public function test(){
echo self::$property;
}
}
class B extends A{
public static $property = 2;
}
$b = new B();
echo $b->test() . "\n";
Консольный журнал:
$:1
Я знаю что класс B
имеет перезаписать статическое свойство.
В чем причина этого результата?
Когда вы добавили
`echo self::$property;`
в test()
из A
перезаписываете ли вы значение статической переменной в расширенном классе или нет, оно будет ссылаться на значение родительского класса, но когда вы измените его на
`echo static::$property;`
это даст значение, основанное на объекте класса.больше информации здесь
Попробуй это:
DEMO
- self — то же самое, что $ this для статических методов / переменных, но всегда действует на определяющий класс.
- static — то же самое, что $ this для статических методов / varialbes, но всегда действует на вызывающий класс (это называется поздней статической привязкой, которая является относительно новой функцией php
Источник: Читать статью
Если вы хотите отобразить значение из класса, из которого вы сделали объект, вы можете использовать команду ниже,
class A {
public static $property = 1;
public function test(){
echo static::$property; // changed self to static
}
}
Надеюсь, вы поняли! Благодарю.