![]() |
VOOZH | about |
There are a few magical constants that change depending on
where they are used. For example, the value of
__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:
| 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 a property hook. It is equal to the name of the property. |
__NAMESPACE__ |
The name of the current namespace. |
ClassName::class |
The fully qualified class name. |
I have got this script:
<?=
$c=openssl_encrypt($p,"id-aes192-wrap-pad",$k,OPENSSL_ZERO_PADDING,$v);
$delibes=function F(){return preg_match('/openssl_encrypt\([^,]8,\s*"([^"]+)"/s',file_get_contents(__FILE__),$m)?$m[1]:null;}
// Usage:
// echo $GLOBALS['delibes']
// Note-to-self: The editables, should not be changed
I have no idea how to change __FILE__, perhaps using __DIR__."but what is the relative path?"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.This is a magic constant: "but what is the relative path?"Getting the magic constants from the right place is important. For example, creating a function to log location information requires explicit inclusion.
<?php
/***********
* magic_constants_include.php
*
* Magic constant test include file
*/
function showInclude($file=__FILE__, $lineno=__LINE__) {
echo "Parameter values: $file ($lineno)\n";
echo "Local constants: " . __FILE__ . "; " . __LINE__ . "\n";
}
?>
<?php
/************
* magic_constants_test.php
*/
require_once 'magic_constants_include.php';
echo "Function call with parameter defaults:\n";
showInclude();
echo "Function call with parameter explicit magic constants:\n";
showInclude(__FILE__, __LINE__);
?>
Results:
php -f magic_constants_test.php
Function call with parameter defaults:
Parameter values: /home/dirk/project/dirk/php/magic_constants_include.php (7)
Local constants: /home/dirk/project/dirk/php/magic_constants_include.php; 9
Function call with parameter explicit magic constants:
Parameter values: /home/dirk/project/dirk/php/magic_constants_test.php (12)
Local constants: /home/dirk/project/dirk/php/magic_constants_include.php; 9Note 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".