Этот вопрос часто возникает при переполнении стека.
Classname::method();
- это просто более короткий способ вызова статического метода в классе.При использовании ::
вам не нужно сначала создавать экземпляр класса.Рассмотрим следующее -
Class Classname{
static public $var = date("F j, Y");
static public method(){
return self::$var;
}
}
echo Classname::method();
$c = new Classname();
echo $c->method();
обе строки эха будут отображать сегодняшнюю дату в формате F j, Y.
Зачем использовать статический метод?Рассмотрите этот пример выше, где у вас есть формат даты, и вы хотите, чтобы это было неизменное значение.Статический метод не имеет состояния.Итак, в примере у нас есть статический метод, обращающийся к статической переменной.Статические свойства не могут получить доступ к классу как объект, как $this
.Но вы можете получить доступ к самому классу, если вы обращаетесь к другим статическим свойствам.Classname::$var
или self::$var
будет действительным.
Я знаю, я вроде не отвечал на вопрос "почему", о котором вы не спрашивали, скажем так.Меня осенило, что мой лучший ответ - «Я не знаю».Я знаю, что такое статический метод или свойство, но на самом деле у меня нет железного примера того, где вы бы конкретно использовали один AND, и в этом же примере объясняется, почему вы ДОЛЖНЫ использовать статический метод, где публичный будет разницей междужизнь и смерть.Я приветствую тех, кто имеет реальный опыт, чтобы опубликовать ответы о том, когда и почему вы бы использовали статический метод, где статическая часть является аксиоматически критической.Я знаю, что это был не настоящий вопрос ОП, но на самом деле, не зная и не понимая цели или необходимости статических методов и свойств, какой смысл вкладывать ::
в ваш ежедневный код?