Предположим, что у вас есть класс, в котором выполняется основной функционал программы. Как известно, чтобы обратиться к его данным, нужно создать объект и работать с ним.
В прошлой статье мы изучали наследование классов. Но что, если нам нужно создать простую функцию или свойство, доступ к которой мы хотим получить сразу (миную процедуру создания классов)? В этом случае нам идеально подойдут статические данные.
Для примера создадим класс со статическим свойством и методом:
class Still {
static $message = "Привет я статик!<br>";
static function world() { return self::$message; }
}
Как вы уже поняли, чтобы сделать свойство или метод статическим достаточно перед ним поставить static. Разберем свойства таких данных:
- static свойства - работают только внутри класса и его методов (с self::) + недоступны напрямую для объектов.
- static методы - работают только со статическими свойствами внутри класса. Такие методы доступны обычным объектам.
Теперь давайте попробуем вывести такие свойства без создания объекта:
echo Still::$message; //выводим статической свойство через класс
echo Still::world(); //выводим статический метод через класс
Но если есть необходимость, то можно выводить эти свойства и через объект:
$still = new Still();
echo $still->world();
Здесь мы выводим статическое свойство $message через объект.
Как вы уже заметили, внутри метода world() есть self:: - он позволяет обращаться к статическим свойствам внутри методов класса (не из дочернего) Т.е. это своего рода аналог $this, но только для статических данных.
Зачем еще могут понадобиться static данные?
Они доступны из любой точки сценария. Предположим у вас есть основной класс, от которого идет множество объектов (экземпляров класса). Все они работаю с суперклассом. И если вы измените какое-то статическое свойство, то оно повлияет сразу на все экземпляры класса. Естественно, напрямую объект не может обратиться к статическому свойству, но как мы выяснили, он может это сделать с помощью метода, который возвратит данные статики.
И второе, неоспоримое преимущество - мы можем обращаться к статическому свойству или методу напрямую через класс, чтобы не создавать лишний код в виде объекта.
Продолжая тему ООП в PHP рекомендую изучить абстрактные классы, чтобы еще больше поднять свой уровень.
Добавить комментарий