PHP 8.1.28 Released!

Constantes Mágicas

Existem nove constantes mágicas que mudam dependendo de onde são usadas. Por exemplo, o valor de __LINE__ depende da linha em que é usada no script. Todas essas constantes "mágicas" são resolvidas em tempo de compilação, ao contrário das constantes regulares, que são resolvidas em tempo de execução. Essas constantes especiais não diferenciam maiúsculas de minúsculas e são as seguintes:

Constantes Mágicas do PHP
Nome Descrição
__LINE__ O número da linha atual do arquivo.
__FILE__ O caminho completo e o nome do arquivo com links simbólicos resolvidos. Se usada dentro de um include, o nome do arquivo incluído será retornado.
__DIR__ O diretório do arquivo. Se usada dentro de um include, o diretório do arquivo incluído será retornado. Isso é equivalente a dirname(__FILE__). O nome do diretório não possui barra no final, a menos que seja o diretório raiz.
__FUNCTION__ O nome da função ou {closure} para funções anônimas.
__CLASS__ O nome da classe. O nome da classe inclui o namespace em que foi declarada (por exemplo, Foo\Bar). Quando usada em um método de trait, __CLASS__ é o nome da classe em que o trait for usado.
__TRAIT__ O nome do trait. O nome do trait inclui o namespace em que foi declarado (por exemplo, Foo\Bar).
__METHOD__ O nome do método da classe.
__NAMESPACE__ O nome do namespace atual.
ClassName::class O nome totalmente qualificado da classe.

add a note

User Contributed Notes 4 notes

up
1
chris at ocproducts dot com
11 months ago
Note that __CLASS__ and __METHOD__ both reference the class the code is written in, not whatever the object class is. E.g. if you have an object of class B inheriting from class A, any usage of __CLASS__ in class A is going to give "A".
up
1
Rich
9 months ago
<?php

namespace My\App {
class
Api {
public static
fetch() {
print
__FUNCTION__ . "\n"; // outputs fetch
print __METHOD__ . "\n"; // outputs My\App\Api::fetch
}
}

Api::fetch();
}

namespace {
My\App\Api::fetch();
}
?>

__METHOD__ outputs a fully qualified method name; __FUNCTION__ when used in a method, outputs just the method name.
up
1
theking2 at king dot ma
1 year ago
If PHP is run inside a web server request there is an important difference between the __DIR__ constant and $_SERVER['DOCUMENT_ROOT'].

Where __DIR__ of a PHP script contained within a sub-folder will include the complete server path $_SERVER['DOCUMENT_ROOT'] will contain a server path up to the _root_ of the application. This can be helpful when for instance an auto-loader is defined in an include file sitting inside a sub-folder and where the classes are located in another folder at the root of the application.
up
0
loren at maxwellemail dot com
14 days ago
As Chris pointed out:
"__CLASS__ and __METHOD__ both reference the class the code is written in, not whatever the object class is."

To get the class of a child object calling a method defined in the parent class use get_class($this).

<?php

class bar {
public function
__construct()
{
var_dump(__CLASS__);
var_dump(get_class());
var_dump(get_class($this));
}
}

class
foo extends bar {
}

new
foo;
?>

Output:
string(3) "bar"
string(3) "bar"
string(3) "foo"
To Top