Junior — Middle
Дар бораи фарқияти калидвожаҳои self:: ва static:: дар контексти фаро гирифтани методҳо ва хусусиятҳо дар PHP чӣ мегӯед?
sobes.tech AI
Ҷавоб аз AI
Дар PHP калидвожаҳои self:: ва static:: барои дастрасӣ ба методҳо ва хусусиятҳо дар дохили синф истифода мешаванд, аммо маънои гуногун доранд:
-
self::— ба метод ё хусусияти дақиқи он синф ишора мекунад, ки дар он код навишта шудааст, нодида гирифтани меросгирӣ. Ин як даъвати статикӣ аст, ки ба синфи ҳозира вобаста аст. -
static::— пайванди static-и дер (late static binding). Вақте ки аз меросгир даъват карда мешавад,static::ба синфе ишора мекунад, ки аз он метод даъват шудааст, яъне меросгириро ба назар мегирад.
Масалан:
class A {
public static function who() {
echo "Клас A\n";
}
public static function test() {
self::who(); // ҳамеша A::who()-ро даъват мекунад
static::who(); // ба методи синфе, ки test()-ро даъват кардааст, даъват мекунад
}
}
class B extends A {
public static function who() {
echo "Клас B\n";
}
}
B::test();
Натиҷа:
Клас A
Клас B
Ин нишон медиҳад, ки self:: сахт бо синфи A вобаста аст, дар ҳоле ки static:: ба меросгирӣ назар мекунад ва методи синфи B-ро даъват мекунад.