Константы класса php

С этой статье пойдёт речь об константах класса 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();

?>

Псевдо-константы

Их несколько типов:

  1. Которая хранит имя текущего класса __CLASS__
  2. Которая хранит имя текущего метода __METHOD__
  3. Которая хранит имя текущего файла __FILE__
  4. Которая хранит номер строки __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();

?>

Valeriu :