Что означают два двоеточия в PHP?
Я не знаю, что он делает, когда у нас такая ситуация:
Foo::Bar
Это похоже на тропинку.
4 answers
Это (как правило) для доступа к статическому методу или свойству в классе. Он называется оператором разрешения области видимости или Paamayim Nekudotayim (что приводит к некоторым удивительно запутанным сообщениям об ошибках!). См. http://www.php.net/manual/en/language.oop5.paamayim-nekudotayim.php.
В ::
оператор - это оператор разрешения области действия. Он используется для доступа к константам класса или статическим свойствам и методам, либо извне класса:
ClassName::CONSTANT_VALUE
ClassName::staticMethod()
Или в методе класса для ссылки на тот же или родительский класс с помощью self
и parent
:
self::CONSTANT_VALUE
self::staticMethod()
parent::CONSTANT_VALUE
parent::staticMethod()
Оператор разрешения области действия (::) двойное двоеточие - это маркер, который позволяет получить доступ к статическому, константа и переопределенные свойства или методы класса.
<?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
?>
Использование оператора разрешения области действия
Константа класса, свойство класса (статическое), функция класса (статическая) все могут иметь одно и то же имя и быть доступны с помощью двойного двоеточия
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;