С этой статье пойдёт речь об константах класса php.
Для начало давайте рассмотрим что такое константы:
Константа — некоторая величина, не изменяющая своё значение в рамках рассматриваемого процесса.
И давайте расмотрим как пишуться обычные константы в PHP:
1 2 3 |
<?php define("PAGE", "index"); ?> |
При работе с классами в ООП существует константы класса.
Теперь рассмотрим как их объявить:
1 2 3 4 5 6 7 |
<?php class Page { const NUMBER = 1; } ?> |
Обычно имена константах пишуться в большом регистре, чтоб отличать их от простых переменных.
Стоит отметить что константы пренадлежат классам а не объектам.
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php class Page { const NUMBER = 1; } $page = new Page(); // не сработает: echo $page->NUMBER; ?> |
В пример что выше показано как делать нельзя.
Для того чтоб получить доступ к значению константам класса нужно использовать следующий синтаксис:
1 2 3 4 5 6 7 8 9 10 11 |
<?php class Page { const NUMBER = 1; } $page = new Page(); echo PAGE::NUMBER; // Вывод: 1 ?> |
Теперь посмотрим как обратиться к константам внутри класса:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php class Page { const NUMBER = 1; function get_const() { echo self::NUMBER; // Вывод: 1 // рабочий пример } } $page = new Page(); $page->get_const(); ?> |
Константы класса php доступны и в дочерних классах.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php class Page { const NUMBER = 1; function get_const() { echo self::NUMBER; // Вывод: 1 } } class Index extends Page { function __construct() { echo self::NUMBER; // Вывод: 1 } } $page = new Page(); $page->get_const(); $index = new Index(); // сработает метод __construct ?> |
Как и в процедуральном подходе, можно проверить если константа существует функцией defined();
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php class Page { const NUMBER = 1; } $page = new Page(); if(defined("Page::NUMBER")) { echo "Константа существует"; } ?> |
Статические свойства класса
Тут тоже нужно учитывать что это не свойства объекта, это свойства класса.
Сразу пример:
1 2 3 4 5 6 7 8 9 10 11 |
<?php class Car { static public $color = 'красный'; } $car = new Car(); echo Car::$color; // Вывод: красный ?> |
Теперь пример использования внутри класса:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php class Car { static public $color = 'red'; public function get_static() { echo self::$color; // Вывод: red } } $car = new Car(); $car->get_static(); ?> |
Теперь посмотрим как введут себя статические свойства при наследоване:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php class Car { static public $color = 'red'; } class Bmw extends Car { public function __construct() { echo self::$color; // Вывод: red } } $car = new Car(); $bmw = new Bmw(); // Сработает метод __construct ?> |
Статические методы класса
Важно отметить: статические методы работют только со статическами свойствами!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php class Car { static public $str = 'Привет мир!'; static public function st_method() { echo self::$str; } } // Теперь посмотрим как можно к ним обращаться Car::st_method(); // либо, второй вариант: $car = new Car(); $car->st_method(); ?> |
Псевдо-константы
Их несколько типов:
- Которая хранит имя текущего класса __CLASS__
- Которая хранит имя текущего метода __METHOD__
- Которая хранит имя текущего файла __FILE__
- Которая хранит номер строки __LINE__
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php class User { public function my_method() { echo "Текущий класс: ".__CLASS__; // Вывод: User echo "Текущий метод: ".__METHOD__; // Вывод: User::my_method echo "Текущий файл: ".__FILE__; // Вывод: C:\folder\my_file.php echo "Текущая строка: ".__LINE__; // Вывод: 8 } } $user = new User(); $user->my_method(); ?> |