PHP
Волшебные константы
Поиск…
замечания
Магические константы отличаются формой __CONSTANTNAME__
.
В настоящее время существует восемь магических констант, которые изменяются в зависимости от того, где они используются. Например, значение __LINE__
зависит от строки, в которой он используется в вашем скрипте.
Эти специальные константы нечувствительны к регистру и имеют следующий вид:
название | Описание |
---|---|
__LINE__ | Текущий номер строки файла. |
__FILE__ | Полный путь и имя файла файла с символическими ссылками разрешены. Если используется внутри include, возвращается имя включенного файла. |
__DIR__ | Каталог файла. Если используется внутри include, возвращается каталог включенного файла. Это эквивалентно dirname(__FILE__) . Это имя каталога не имеет завершающей косой черты, если это не корневая директория. |
__FUNCTION__ | Имя текущей функции |
__CLASS__ | Имя класса. Имя класса включает пространство имен, в котором оно было объявлено (например, Foo\Bar ). При использовании в методе trait __CLASS__ - это имя класса, в котором используется признак. |
__TRAIT__ | Имя признака. Имя признака включает пространство имен, в котором оно было объявлено (например, Foo\Bar ). |
__METHOD__ | Имя метода класса. |
__NAMESPACE__ | Имя текущего пространства имен. |
Наиболее распространенным вариантом использования этих констант является отладка и ведение журнала
Разница между __FUNCTION__ и __METHOD__
__FUNCTION__
возвращает только имя функции, тогда как __METHOD__
возвращает имя класса вместе с именем функции:
<?php
class trick
{
public function doit()
{
echo __FUNCTION__;
}
public function doitagain()
{
echo __METHOD__;
}
}
$obj = new trick();
$obj->doit(); // Outputs: doit
$obj->doitagain(); // Outputs: trick::doitagain
Разница между __CLASS__, get_class () и get_called_class ()
__CLASS__
magic constant возвращает тот же результат, что и get_class()
вызываемая без параметров, и оба возвращают имя класса, где он был определен (т. get_class()
Где вы написали имя функции / имя константы).
Напротив, get_class($this)
и get_called_class()
будут возвращать имя фактического класса, который был создан:
<?php
class Definition_Class {
public function say(){
echo '__CLASS__ value: ' . __CLASS__ . "\n";
echo 'get_called_class() value: ' . get_called_class() . "\n";
echo 'get_class($this) value: ' . get_class($this) . "\n";
echo 'get_class() value: ' . get_class() . "\n";
}
}
class Actual_Class extends Definition_Class {}
$c = new Actual_Class();
$c->say();
// Output:
// __CLASS__ value: Definition_Class
// get_called_class() value: Actual_Class
// get_class($this) value: Actual_Class
// get_class() value: Definition_Class
Константы файлов и каталогов
Текущий файл
Вы можете получить имя текущего файла PHP (с абсолютным путем), используя магическую константу __FILE__
. Это чаще всего используется в качестве метода ведения журнала / отладки.
echo "We are in the file:" , __FILE__ , "\n";
Текущий каталог
Чтобы получить абсолютный путь к каталогу, в котором находится текущий файл, используйте магическую константу __DIR__
.
echo "Our script is located in the:" , __DIR__ , "\n";
Чтобы получить абсолютный путь к каталогу, в котором находится текущий файл, используйте dirname(__FILE__)
.
echo "Our script is located in the:" , dirname(__FILE__) , "\n";
Получение текущего каталога часто используется фреймворками PHP для установки базового каталога:
// index.php of the framework
define(BASEDIR, __DIR__); // using magic constant to define normal constant
// somefile.php looks for views:
$view = 'page';
$viewFile = BASEDIR . '/views/' . $view;
Сепараторы
Система Windows отлично понимает пути
/
in, поэтомуDIRECTORY_SEPARATOR
используется в основном при анализе путей.
Помимо магических констант PHP также добавляет некоторые фиксированные константы для работы с путями:
-
DIRECTORY_SEPARATOR
для разделения каталогов в пути. Принимает значение/
на * nix и\
на Windows. Пример с представлениями можно переписать с помощью:
$view = 'page';
$viewFile = BASEDIR . DIRECTORY_SEPARATOR .'views' . DIRECTORY_SEPARATOR . $view;
- Редко используется константа
PATH_SEPARATOR
для разделения путей в$PATH
среды$PATH
. Это;
на Windows,:
в противном случае