PHP: Hypertext Preprocessor (original) (raw)

Magic constants

There are a few magical constants that change depending on where they are used. For example, the value of**[__LINE__](language.constants.magic.php#constant.line)** depends on the line that it's used on in a script. All these "magical" constants are resolved at compile time, unlike regular constants, which are resolved at runtime. These special constants are case-insensitive and are as follows:

PHP's magic constants

Name Description
__LINE__ The current line number of the file.
__FILE__ The full path and filename of the file with symlinks resolved. If used inside an include, the name of the included file is returned.
__DIR__ The directory of the file. If used inside an include, the directory of the included file is returned. This is equivalent to dirname(__FILE__). This directory name does not have a trailing slash unless it is the root directory.
__FUNCTION__ The function name, or {closure} for anonymous functions.
__CLASS__ The class name. The class name includes the namespace it was declared in (e.g. Foo\Bar). When used inside a trait method,__CLASS__ is the name of the class the trait is used in.
__TRAIT__ The trait name. The trait name includes the namespace it was declared in (e.g. Foo\Bar).
__METHOD__ The class method name.
__PROPERTY__ Only valid inside aproperty hook. It is equal to the name of the property.
__NAMESPACE__ The name of the current namespace.
ClassName::class The fully qualified class name.

Found A Problem?

Rich

1 year ago

`<?phpnamespace 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.`

chris at ocproducts dot com

1 year 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".

theking2 at king dot ma

2 years 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.

`