Кроме статических методов можно также делать и статические свойства. Такие свойства также объявляются с помощью ключевого слова 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.