Wat is late statische binding in PHP?
sobes.tech AI
Antwoord van AI
Dit mechanisme maakt het mogelijk om te verwijzen naar de opgeroepen klasse in de context van statische oproepen. Het lost het probleem op dat verband houdt met zelfverwijzingen in afgeleide klassen bij het gebruik van het sleutelwoord static::.
Laten we een voorbeeld bekijken met self:::
<?php
class A {
public static function who() {
echo __CLASS__; // Toont A
}
public static function test() {
self::who(); // Roept A::who() op
}
}
class B extends A {
public static function who() {
echo __CLASS__; // Toont B
}
}
B::test(); // Toont A
In dit geval roept self::who() binnen de klasse A altijd de methode who van klasse A op, zelfs als de aanroep van test() afkomstig is van klasse B.
Laten we nu een voorbeeld bekijken met static:::
<?php
class A {
public static function who() {
echo __CLASS__;
}
public static function test() {
static::who(); // Roept who() op van de klasse die de call heeft geïnitieerd
}
}
class B extends A {
public static function who() {
echo __CLASS__;
}
}
B::test(); // Toont B
Hier verwijst static::who() binnen klasse A bij een oproep vanuit klasse B naar klasse B en roept de methode who() van klasse B op.
De late static binding maakt het mogelijk om dynamisch te bepalen welke klasse gebruikt moet worden in de context van een statische oproep, afhankelijk van welke klasse daadwerkelijk werd opgeroepen. Dit is vooral handig bij het werken met klassehiërarchieën en statische methoden die polymorf gedrag moeten vertonen. Het werkt door de "niet-omgeleide opgeroepen klasse" (de uiteindelijke klasse in de erfketen waar de statische oproep begon) te onthouden en te gebruiken voor het oplossen van static::-verwijzingen.