Что означают два двоеточия в PHP?


Я не знаю, что он делает, когда у нас такая ситуация:

Foo::Bar

Это похоже на тропинку.

Author: Peter Mortensen, 2010-05-25

4 answers

Это (как правило) для доступа к статическому методу или свойству в классе. Он называется оператором разрешения области видимости или Paamayim Nekudotayim (что приводит к некоторым удивительно запутанным сообщениям об ошибках!). См. http://www.php.net/manual/en/language.oop5.paamayim-nekudotayim.php.

 39
Author: Chris, 2010-05-25 09:52:45

В :: оператор - это оператор разрешения области действия. Он используется для доступа к константам класса или статическим свойствам и методам, либо извне класса:

ClassName::CONSTANT_VALUE
ClassName::staticMethod()

Или в методе класса для ссылки на тот же или родительский класс с помощью self и parent:

self::CONSTANT_VALUE
self::staticMethod()
parent::CONSTANT_VALUE
parent::staticMethod()
 51
Author: Gumbo, 2010-05-25 09:52:44

Оператор разрешения области действия (::) двойное двоеточие - это маркер, который позволяет получить доступ к статическому, константа и переопределенные свойства или методы класса.

<?php
class A {

public static $B = '1'; # Static class variable.

const B = '2'; # Class constant.

public static function B() { # Static class function.
    return '3';
}

}

echo A::$B . A::B . A::B(); # Outputs: 123
?>
 4
Author: susheel sahoo, 2016-04-05 06:19:04

Использование оператора разрешения области действия

Константа класса, свойство класса (статическое), функция класса (статическая) все могут иметь одно и то же имя и быть доступны с помощью двойного двоеточия

class B{
    public static $par = "par";
}
class A extends B{
    const B = "constant";
    public static $sel = "self";

    public static $b = "static property";
    public static function b(){
        echo "static function";
    }
    public static function c(){
        return parent::$par;
    }
    public static function d(){
        return self::$sel;
    }
     public static function e(){
        return self::$par;
    }
}

echo A::B.PHP_EOL;
echo A::$b.PHP_EOL;
echo A::b().PHP_EOL;
echo A::c().PHP_EOL;
echo A::d().PHP_EOL;
 0
Author: stalin wesley, 2018-08-21 11:02:15