С этой статье пойдёт речь об константах класса php.
Для начало давайте рассмотрим что такое константы:
Константа — некоторая величина, не изменяющая своё значение в рамках рассматриваемого процесса.
И давайте расмотрим как пишуться обычные константы в PHP:
<?php
define("PAGE", "index");
?> При работе с классами в ООП существует константы класса.
Теперь рассмотрим как их объявить:
<?php
class Page {
const NUMBER = 1;
}
?> Обычно имена константах пишуться в большом регистре, чтоб отличать их от простых переменных.
Стоит отметить что константы пренадлежат классам а не объектам.
<?php
class Page {
const NUMBER = 1;
}
$page = new Page();
// не сработает:
echo $page->NUMBER;
?> В пример что выше показано как делать нельзя.
Для того чтоб получить доступ к значению константам класса нужно использовать следующий синтаксис:
<?php
class Page {
const NUMBER = 1;
}
$page = new Page();
echo PAGE::NUMBER; // Вывод: 1
?> Теперь посмотрим как обратиться к константам внутри класса:
<?php
class Page {
const NUMBER = 1;
function get_const() {
echo self::NUMBER; // Вывод: 1
// рабочий пример
}
}
$page = new Page();
$page->get_const();
?> Константы класса php доступны и в дочерних классах.
<?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();
<?php
class Page {
const NUMBER = 1;
}
$page = new Page();
if(defined("Page::NUMBER")) {
echo "Константа существует";
}
?> Статические свойства класса
Тут тоже нужно учитывать что это не свойства объекта, это свойства класса.
Сразу пример:
<?php
class Car {
static public $color = 'красный';
}
$car = new Car();
echo Car::$color; // Вывод: красный
?> Теперь пример использования внутри класса:
<?php
class Car {
static public $color = 'red';
public function get_static() {
echo self::$color; // Вывод: red
}
}
$car = new Car();
$car->get_static();
?> Теперь посмотрим как введут себя статические свойства при наследоване:
<?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
?> Статические методы класса
Важно отметить: статические методы работют только со статическами свойствами!
<?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__
<?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();
?>