Поиск…


замечания

Магические константы отличаются формой __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, : в противном случае


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow