Статические свойства в ООП на PHP

Кроме статических методов можно также делать и статические свойства. Такие свойства также объявляются с помощью ключевого слова static:

<?php class Test { public static $property; // статическое свойство } ?>

Можно что-то записать в статическое свойство и прочитать из него. При этом имя свойства указывается вместе с долларом:

<?php Test::$property = 'test'; echo Test::$property; // выведет 'test' ?>

Сделайте класс Num, у которого будут два публичных статических свойства: num1 и num2. Запишите в первое свойство число 2, а во второе - число 3. Выведите сумму значений свойств на экран.

Статическое свойство внутри класса

Можно также обращаться к статическим свойствам внутри самого класса, используя self::, смотрите пример:

<?php class Test { // Приватное статическое свойство: private static $property; // Статический метод для задания значения свойства: public static function setProperty($value) { self::$property = $value; // записываем данные в наше static свойство } // Статический метод для получения значения свойства: public static function getProperty() { return self::$property; // прочитываем записанные данные } } ?>

Воспользуемся нашим классом:

<?php Test::setProperty('test'); // запишем данные в свойство echo Test::getProperty(); // выведем на экран ?>

Можно также задать начальное значение свойства:

<?php class Test { // Начальное значение свойства: private static $property = 'test'; public static function getProperty() { return self::$property; } } echo Test::getProperty(); // выведет 'test' ?>

Сделайте класс Num, у которого будут два приватны статических свойства: num1 и num2. Пусть по умолчанию в свойстве num1 хранится число 2, а в свойстве num2 - число 3.

Сделайте в классе Num метод getSum, который будет выводить на экран сумму значений свойств num1 и num2.

Применение

Пусть у нас есть класс Geometry для работы с геометрическими фигурами. В этом классе есть методы для определения площади круга и длины окружности:

<?php class Geometry { // Площадь круга: public static function getCircleSquare($radius) { return 3.14 * $radius * $radius; } // Длина окружности: public static function getCircleСircuit($radius) { return 2 * 3.14 * $radius; } } ?>

Как вы видите, в обоих методах используется число Пи, равное 3.14. Было бы удобно вынести это число в статическое свойство класса - в этом случае значение числа Пи будет задаваться в одном месте и мы легко сможем поменять его в случае необходимости (например, написать больше знаков в дробной части).

Давайте сделаем это:

<?php class Geometry { private static $pi = 3.14; // вынесем Пи в свойство public static function getCircleSquare($radius) { return self::$pi * $radius * $radius; } public static function getCircleСircuit($radius) { return 2 * self::$pi * $radius; } } ?>

Добавьте в наш класс Geometry метод, который будет находить объем шара по радиусу. С помощью этого метода выведите на экран объем шара с радиусом 10.