Statement on glibc/iconv Vulnerability

Magische Konstanten

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:

PHP's magische Konstanten
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.

add a note

User Contributed Notes 3 notes

up
2
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
0
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
0
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.
To Top