Sobes.tech
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-ро даъват мекунад.