PHP Magic constants

PHP provides a large number of predefined constants to any script which it runs.

There are five 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 your script. These special constants are case-insensitive and are as follows −

A few "magical" PHP constants are given below −

Sr.No

Name & Description

1

__LINE__

The current line number of the file.

2

__FILE__

The full path and filename of the file. If used inside an include,the name of the included file is returned. Since PHP 4.0.2, __FILE__always contains an absolute path whereas in older versions it contained relative path under some circumstances.

3

__FUNCTION__

The function name. (Added in PHP 4.3.0) As of PHP 5 this constant returns the function name as it was declared (case-sensitive). In PHP 4 its value is always lowercased.

4

__CLASS__

The class name. (Added in PHP 4.3.0) As of PHP 5 this constant returns the class name as it was declared (case-sensitive). In PHP 4 its value is always lowercased.

5

__METHOD__

The class method name. (Added in PHP 5.0.0) The method name is returned as it was declared (case-sensitive).

Magic Constants

Magic constants are the predefined constants in PHP which get changed on the basis of their use. They start with double underscore (__) and ends with double underscore.

They are similar to other predefined constants but as they change their values with the context, they are called magic constants.

There are eight magical constants defined in the below table. They are case-insensitive.

Name

Description

__LINE__

Represents current line number where it is used.

__FILE__

Represents full path and file name of the file. If it is used inside an include, name of included file is returned.

__DIR__

Represents full directory path of the file. Equivalent to dirname(__file__). It does not have a trailing slash unless it is a root directory. It also resolves symbolic link.

__FUNCTION__

Represents the function name where it is used. If it is used outside of any function, then it will return blank.

__CLASS__

Represents the class name where it is used. If it is used outside of any function, then it will return blank.

__TRAIT__

Represents the trait name where it is used. If it is used outside of any function, then it will return blank. It includes namespace it was declared in.

__METHOD__

Represents the name of the class method where it is used. The method name is returned as it was declared.

__NAMESPACE__

Represents the name of the current namespace.

 


Example

Let's see an example for each of the above magical constants.

File Name: magic.php

<?php  

echo "<h3>Example for __LINE__</h3>";  

echo "You are at line number " . __LINE__ . "<br><br>";// print Your current line number i.e;3  

echo "<h3>Example for __FILE__</h3>";  

echo __FILE__ . "<br><br>";//print full path of file with .php extension  

echo "<h3>Example for __DIR__</h3>";  

echo __DIR__ . "<br><br>";//print full path of directory where script will be placed  

echo dirname(__FILE__) . "<br><br>"; //its output is equivalent to above one.  

echo "<h3>Example for __FUNCTION__</h3>";  

//Using magic constant inside function.  

function cash(){  

echo 'the function name is '. __FUNCTION__ . "<br><br>";//the function name is cash.  

}  

cash();  

//Using magic constant outside function gives the blank output.  

function test_function(){  

echo 'HYIIII';  

}  

test_function();  

echo  __FUNCTION__ . "<br><br>";//gives the blank output.    

echo "<h3>Example for __CLASS__</h3>";  

class abc  

{  

public function __construct() {  

;  

function abc_method(){  

echo __CLASS__ . "<br><br>";//print name of the class abc.  

}  

}  

$t = new abc;  

$t->abc_method();  

class first{  

function test_first(){  

echo __CLASS__;//will always print parent class which is first here.  

}  

}  

class second extends first  

{  

public function __construct() {  

;  

}  

}  

$t = new second;  

$t->test_first();  

echo "<h3>Example for __TRAIT__</h3>";  

trait created_trait{  

function abc(){  

echo __TRAIT__;//will print name of the trait created_trait  

}  

}  

class anew{  

use created_trait;  

}  

$a = new anew;  

$a->abc();  

echo "<h3>Example for __METHOD__</h3>";  

class meth{  

public function __construct() {  

echo __METHOD__ . "<br><br>";//print meth::__construct  

}  

public function meth_fun(){  

echo __METHOD__;//print meth::meth_fun  

}  

}  

$a = new meth;  

$a->meth_fun();    

echo "<h3>Example for __NAMESPACE__</h3>";  

class name{  

public function __construct() {  

echo 'This line will be printed on calling namespace';  

}  

}  

$clas_name= __NAMESPACE__ .' ame';  

$a = new $clas_name;  ?>  

Arvind Dubey is founder of Developer Blog. He is an engineer as per his education and blogger by his profession. Before becoming a professional blogger. he decied to be his own boss and started blogging part time. His passion is blogging and under shoutmeloud, he blogs on topics like blogging tips, core php, mysql, javascript, WordPress, Web tools, SEO and so on


1406, Chember Block, Block D, Sector 14, Rohini, Delhi, 110085

Email: info@developerblog.in