ΠœΠ°Π³ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ константы

PHP Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ряд магичСских констант, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… измСняСтся Π² зависимости ΠΎΡ‚ контСкста. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ константы __LINE__, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, зависит ΠΎΡ‚ строки скрипта, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Π»ΠΈ константу. PHP Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ «магичСскиС» константы Π²ΠΎ врСмя компиляции, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ стандартных констант, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ PHP Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π²ΠΎ врСмя выполнСния. Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ константы Π½Π΅Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ ΠΊ рСгистру, Π° список Ρ‚Π°ΠΊΠΈΡ… констант ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„:

ΠœΠ°Π³ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ константы PHP
Имя ОписаниС
__LINE__ Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ€ строки Ρ„Π°ΠΉΠ»Π°.
__FILE__ ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΈ имя Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π° с Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹ΠΌΠΈ символичСскими ссылками. PHP Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ имя ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, Ссли константу ΡƒΠΊΠ°Π·Π°Π»ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ.
__DIR__ ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ Ρ„Π°ΠΉΠ»Π°. PHP Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, Ссли константу ΡƒΠΊΠ°Π·Π°Π»ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ константы эквивалСнтно Π²Ρ‹Π·ΠΎΠ²Ρƒ dirname(__FILE__). Имя ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° возвращаСтся Π±Π΅Π· слСша Π² ΠΊΠΎΠ½Ρ†Π΅, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ это Π½Π΅ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³.
__FUNCTION__ НазваниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ {closure} для Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
__CLASS__ НазваниС класса. НазваниС класса Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ пространство ΠΈΠΌΡ‘Π½, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ объявили класс, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Foo\Bar. Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ‚Ρ€Π΅ΠΉΡ‚ΠΎΠ² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ константы __CLASS__ Ρ€Π°Π²Π½ΠΎ названию класса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚Ρ€Π΅ΠΉΡ‚Π°.
__TRAIT__ Имя Ρ‚Ρ€Π΅ΠΉΡ‚Π°. Имя Ρ‚Ρ€Π΅ΠΉΡ‚Π° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ пространство ΠΈΠΌΡ‘Π½, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ объявили Ρ‚Ρ€Π΅ΠΉΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Foo\Bar.
__METHOD__ Имя ΠΌΠ΅Ρ‚ΠΎΠ΄Π° класса.
__PROPERTY__ НазваниС свойства. ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π° дСйствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ…ΡƒΠΊΠ° свойства.
__NAMESPACE__ Имя Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ пространства ΠΈΠΌΡ‘Π½.
ClassName::class ΠΠ±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ имя класса.

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅

οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ 5 notes

up
2
webmaster at event-horizon dot lt ΒΆ
2 months ago
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?"
up
2
theking2 at king dot ma ΒΆ
3 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.
up
0
Athralon dot media at gmail dot com ΒΆ
2 months ago
This is a magic constant: "but what is the relative path?"
up
0
dirk at biztechwiz dot com ΒΆ
2 months ago
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; 9
up
0
chris at ocproducts dot com ΒΆ
3 years 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".