Статические методы в 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. | Имя свойства после оператора :: всегда имеет знак доллара ($). |