PHP Магические константы

PHP предоставляет большое количество предопределённых констант любому запускаемому скрипту.

Однако многие константы определяются различными библиотеками расширений и появляются только тогда, когда эти библиотеки загружены, либо после динамической загрузки, либо когда они уже были подключены во время компиляции.

Существует восемь магических констант, значения которых меняются в зависимости от их положения в коде.

Например, значение __LINE__ зависит от строки в скрипте, где оно используется. Эти специальные константы нечувствительны к регистру, как показано ниже:


__LINE__

Текущий номер строки в файле.

Примеры

<?php echo 'Это строка "' . __LINE__ . '"'; ?>

Вывод приведенного выше примера:

这是第 “ 2 ” 行

__FILE__

Полный путь и имя файла. Если используется внутри включённого файла, возвращается имя включённого файла.

Начиная с PHP 4.0.2, __FILE__ всегда содержит абсолютный путь (если это символическая ссылка, то это разрешённый абсолютный путь), тогда как в более ранних версиях он иногда содержал относительный путь.

Пример:

Примеры

<?php echo 'Файл находится в "' . __FILE__ . ' " '; ?>

Вывод приведенного выше примера:

该文件位于 “ E:\wamp\www\test\index.php ”

__DIR__

Каталог файла. Если используется внутри включённого файла, возвращается каталог включённого файла.

Это эквивалентно dirname(__FILE__). Если это не корневой каталог, имя не включает завершающую косую черту. (Добавлено в PHP 5.3.0)

Примеры

<?php echo 'Файл находится в "' . __DIR__ . ' " '; ?>

Вывод приведенного выше примера:

该文件位于 “ E:\wamp\www\test ”

__FUNCTION__

Имя функции (добавлено в PHP 4.3.0). Начиная с PHP 5, эта константа возвращает имя функции в момент её определения (с учётом регистра). В PHP 4 значение всегда было в нижнем регистре.

Примеры

<?php function test() { echo 'Имя функции:' . __FUNCTION__ ; } test(); ?>

Вывод приведенного выше примера:

函数名为:test

__CLASS__

Имя класса (добавлено в PHP 4.3.0). Начиная с PHP 5, эта константа возвращает имя класса, когда он был определён (с учётом регистра).

В PHP 4 значение всегда было в нижнем регистре. Имя класса включает его объявленную область видимости (например, Foo\Bar). Обратите внимание, что начиная с PHP 5.4, __CLASS__ также работает с трейтами. При использовании в методе трейта __CLASS__ — это имя класса, вызывающего метод трейта.

Примеры

<?php class test { function _print() { echo 'Имя класса:' . __CLASS__ . "<br>"; echo 'Имя функции:' . __FUNCTION__ ; } } $t = new test(); $t->_print(); ?>

Вывод приведенного выше примера:

类名为:test
函数名为:_print

__TRAIT__

Имя трейта (добавлено в PHP 5.4.0). Начиная с PHP 5.4.0, PHP реализует способ повторного использования кода, называемый трейтами.

Имя трейта включает его объявленную область видимости (например, Foo\Bar).

Члены, унаследованные от базового класса, переопределяются методом MyHelloWorld, вставленным из трейта SayWorld. Его поведение согласуется с методом, определённым в классе MyHelloWorld. Порядок приоритета таков: методы текущего класса переопределяют методы трейта, а методы трейта переопределяют методы базового класса.

Примеры

<?php class Base { public function sayHello() { echo 'Hello '; } } trait SayWorld { public function sayHello() { parent::sayHello(); echo 'World!'; } } class MyHelloWorld extends Base { use SayWorld; } $o = new MyHelloWorld(); $o->sayHello(); ?>

Приведённый выше пример выведет:

Hello World!

__METHOD__

Имя метода класса (добавлено в PHP 5.0.0). Возвращает имя метода на момент его определения (с учётом регистра).

Пример:

Примеры

<?php function test() { echo 'Имя функции:' . __METHOD__ ; } test(); ?>

Вывод приведенного выше примера:

函数名为:test

__NAMESPACE__

Имя текущего пространства имен (с учетом регистра). Эта константа определяется во время компиляции (добавлена в PHP 5.3.0).

Пример:

Примеры

<?php namespace MyProject; echo 'Пространство имен: "', __NAMESPACE__, '"'; //Выводит "MyProject" ?>

Вывод приведенного выше примера:

命名空间为:"MyProject"
Другие расширения