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".
Es gibt neun magische Konstanten, die, abhängig davon, wo sie eingesetzt
werden, einen unterschiedlichen Wert haben. Zum Beispiel hängt der Wert
der Konstanten __LINE__
davon ab, in welcher Zeile
des Skripts diese Konstante verwendet wird. Alle diese "magischen"
Konstanten werden während der Kompilierzeit aufgelöst, im Gegensatz zu
regulären Konstanten, die während der Laufzeit aufgelöst werden. Diese
besonderen Konstanten sind unabhängig von Groß-/Kleinschreibung und sind
folgende:
Name | Beschreibung |
---|---|
__LINE__ |
Die aktuelle Zeilennummer einer Datei. |
__FILE__ |
Der vollständige Pfad- und Dateiname einer Datei mit aufgelösten Symlinks. Wird diese Konstante innerhalb einer nachgeladenen Datei verwendet, wird der Name dieser eingebundenen Datei zurückgegeben. |
__DIR__ |
Der Name des Verzeichnisses, in dem sich die Datei befindet. Wird die
Konstante innerhalb eines Includes verwendet, wird das Verzeichnis
der eingebundenen Datei zurückgegeben. Dies entspricht dem Verhalten
von dirname(__FILE__) . Der Verzeichnisname hat
keinen beendenden Schrägstrich, sofern es sich nicht um das
Rootverzeichnis handelt.
|
__FUNCTION__ |
Der Name der Funktion, oder {closure} für anonyme
Funktionen.
|
__CLASS__ |
Der Name einer Klasse. Der Klassenname enthält den Namen des
Namensraums, in dem sie deklariert wurde (z. B.
Foo\Bar ). Bei Verwendung in einer Trait-Methode,
ist __CLASS__ der Name der Klasse, in der der Trait verwendet wird.
|
__TRAIT__ |
Der Name eines Traits. Dieser enthält auch den Namensraum, in welchem
der Trait definiert wurde (z. B. Foo\Bar ).
|
__METHOD__ |
Der Name der Klassenmethode. |
__NAMESPACE__ |
Der Name des aktuellen Namensraums. |
ClassName::class |
Der vollständig qualifizierte Klassenname. |
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".
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.
<?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.
You can implement magic constants as given below example:
<?php
namespace UserModel {
class User {
public function __construct() {
echo 'I am in '.__CLASS__.'</br>';
}
public function showData() {
echo 'I am in '.__METHOD__.'</br>';
}
}
$obj = new User;
$obj->showData();
echo __NAMESPACE__;
}
?>