Статические методы в PHP
В некоторых случаях лучше подходить к методам и свойствам класса без необходимости создавать объект вне класса. Это может быть достигнуто путем определения методов и свойств класса как статических. Мы уже узнали о трех модификаторах доступа: public, protected и private. Этот урок посвящен четвертому модификатору static, который позволяет получить доступ к свойствам и методам классов без необходимости создавать объекты вне классов.
Статические методы
В некоторых случаях очень удобно обращаться к методам и свойствам в терминах класса, а не объекта — без предварительного создания экземпляра класса.
Статический метод необходимо использовать только тогда, когда конкретная информация остается неизменной для всего класса. По сути, статический метод используется при доступе к этому методу без помощи объекта этого класса.
Чтобы добавить статический метод в класс, нужно после модификатора доступа (то есть после public, private или protected) написать ключевое слово static:
Синтаксис
<?php
class ClassName {
public static function staticMethod() {
// некоторый код...
}
}
?>
Доступ к статическим методам
При вызове статического метода используется имя класса и оператор разрешения области видимости (::), вместо операции доступа ->, так как статический метод относится ко всему классу, а не к конкретному объекту этого класса:
Синтаксис
<?php
ClassName::staticMethod();
?>
Давайте рассмотрим пример:
Пример
Попробуй сам »<?php
class Car{
static function getColor(){
return "blue";
}
}
echo (Car::getColor());
?>
Результат выполнения кода:
В рассмотренном примере мы объявляем статический метод: getColor(). Затем мы вызываем статический метод, используя имя класса, двойное двоеточие (::) и имя метода (без предварительного создания экземпляра класса).
Таким же образом можно вызывать статические методы из методов других классов. Для этого видимость статического метода должна быть публичной (public):
Пример
Попробуй сам »<?php
class Car{
public static function getColor(){
return "blue";
}
}
class SomeOtherClass {
public function message() {
echo (Car::getColor());
}
}
$someotherclass = new SomeOtherClass();
$someotherclass->message();
?>
Результат выполнения кода:
У класса могут быть как статические, так и нестатические методы. Таким же образом, как мы использовали ключевое слово $this для доступа к собственным свойствам и методам класса изнутри класса, мы используем зарезервированное ключевое слово self и двойное двоеточие (::), чтобы получить доступ к статическому методу из метода того же класса:
Пример
Попробуй сам »<?php
class MyClass {
public static function myStaticMethod() {
echo "Привет мир!";
}
public function __construct() {
self::myStaticMethod();
}
}
new MyClass();
?>
Результат выполнения кода:
Чтобы получить доступ к статическому методу из дочернего класса, используйте ключевое слово parent внутри дочернего класса:
Пример
Попробуй сам »<?php
class domain {
protected static function getWebsiteName() {
return "wm-school.ru";
}
}
class domain2 extends domain {
public $websiteName;
public function __construct() {
$this->websiteName = parent::getWebsiteName();
}
}
$domain2 = new domain2;
echo $domain2 -> websiteName;
?>
Результат выполнения кода:
Примечание: Статический метод, к которому нужно получить доступ из дочернего класса должен иметь модификатор видимости public или protected.
Различия self и $this
Начинающие разработчики, которые плохо знакомы с объектно-ориентированным программированием в PHP, иногда путаются между self и $this. Давайте проясним концепции.
$this | self |
|---|---|
| Представляет экземпляр класса или объекта | Представляет класс |
| Всегда начинайте со знака доллара ($) | Никогда не начинайте со знака доллара ($) |
| За ним следует оператор -> | За ним следует оператор :: |
| Имя свойства после оператора -> не имеет знака доллара ($), например, $ this-> property. | Имя свойства после оператора :: всегда имеет знак доллара ($). |
