АКЦИЯ: бесплатные месячные курсы по созданию сайтов
на выбор: верстка, JavaScript, PHP или фреймворки. Сегодня последний день для записи! Жми!
⊗ppOpBsSM 29 of 107 menu
Долгожданный Бесплатный курс по выкладке сайта на хостинг. МЫ УЖЕ НАЧАЛИ! Присоединяйтесь к нам!

Статические методы в ООП на PHP

При работе с классами можно делать методы, которые для своего вызова не требуют создания объекта. Такие методы называются статическими. Чтобы объявить метод статическим, нужно после модификатора доступа написать ключевое слово static:

<?php class Test { // Статический метод: public static function method() { return '!!!'; } } ?>

Чтобы обратиться к статическому методу, нужно написать имя класса, потом два двоеточия и имя метода, объект класса при этом создавать не надо, вот так:

<?php echo Test::method(); // выведет '!!!' ?>

Пример

Давайте рассмотрим статические методы на более практическом примере. Пусть у нас дан вот такой математический класс Math (пока без статических методов):

<?php class Math { // Находит сумму: public function getSum($a, $b) { return $a + $b; } // Находит произведение: public function getProduct($a, $b) { return $a * $b; } } ?>

Давайте воспользуемся нашим классом:

<?php $math = new Math; // создаем объект класса echo $math->getSum(1, 2) + $math->getProduct(3, 4); // используем методы ?>

Наш класс Math представляет собой просто набор методов и, фактически, нам нужен только один объект этого класса. В таком случае удобно объявить методы класса статическими и вообще не создавать объект этого класса, а сразу использовать его методы. Сделаем это:

<?php class Math { public static function getSum($a, $b) { return $a + $b; } public static function getProduct($a, $b) { return $a * $b; } } ?>

Воспользуемся методами нашего класса без создания объекта класса:

<?php echo Math::getSum(1, 2) + Math::getProduct(3, 4); ?>

Статические методы внутри класса

Если вы хотите использовать статические методы внутри класса, то к ним следует обращаться не через $this->, а с помощью self::.

Для примера добавим в наш класс Math метод getDoubleSum, который будет находить удвоенную сумму чисел. Используем внутри нового метода уже существующий метод getSum:

<?php class Math { // Найдем удвоенную сумму: public static function getDoubleSum($a, $b) { return 2 * self::getSum($a, $b); // используем другой метод } public static function getSum($a, $b) { return $a + $b; } public static function getProduct($a, $b) { return $a * $b; } } ?>

Воспользуемся новым методом:

<?php echo Math::getDoubleSum(1, 2); ?>

Практика

Пусть у нас дан вот такой класс ArraySumHelper, который мы рассматривали в одном из предыдущих уроков:

<?php class ArraySumHelper { public function getSum1($arr) { return $this->getSum($arr, 1); } public function getSum2($arr) { return $this->getSum($arr, 2); } public function getSum3($arr) { return $this->getSum($arr, 3); } public function getSum4($arr) { return $this->getSum($arr, 4); } private function getSum($arr, $power) { $sum = 0; foreach ($arr as $elem) { $sum += pow($elem, $power); } return $sum; } } ?>

Переделайте методы класса ArraySumHelper на статические.

Пусть дан массив с числами. Найдите с помощью класса ArraySumHelper сумму квадратов элементов этого массива.