PHP’s Magic Constants: __LINE__ , __FILE__, __FUNCTION__, __CLASS__, and __METHOD__

Setting constants in PHP is as easy as using the define function, but PHP creates a few constants in every script for you that help mostly for debugging purposes (well, that's generally the only time I use them). These constants are called "magic constants."

Magic constants have a funny syntax, placing two underscores before and after the constant's word representation. These are PHP's magic constants:

__LINE__
__FILE__
__FUNCTION__
__CLASS__
__METHOD__

You can imagine how helpful these constants are for debugging...but if you can't:

if($sugar == '') { echo('$sugar has no value on line '.__LINE__.' of ['.__FILE__.']'); }

There are also helpful uses for these magic constants:

dirname(__FILE__) // get the directory name of the current script

What do you use them for?


Comments

  1. Jesus DeLaTorre

    My two favorite are

    That you can use it to get parent directory:

    dirname(dirname(__FILE__))

    or you can include the init.php file from anywhere in your filesystem:

    You would use
    include_once(dirname(__FILE__) . ‘/database.class.php’); in the init.php

  2. david

    Wow, awesome usage of the __FILE__ magic constant — I hadn’t thought of that one!

  3. Jaime

    Useful!

  4. jeezaa

    To Jesus DeLaTorre:

    “dirname(dirname(__FILE__)”

    Maybe it could be better, when you use this:

    $dir = str_replace ( “\”, “/”, dirname ( _FILE_ ) )
    -> for Windows based systems

    (PS: nice book engine)

  5. devnotes

    thanks for this, i knew only __FILE__ so i googled this article :)

  6. Jim

    @jeezaa:

    Instead of ‘/’ for linux and ‘\’ for windows, just use another constant:

    include_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . ‘database.class.php);

  7. Petah

    omg @ the comments

    realpath(dirname(__FILE__)) or

    __DIR__ or

    realpath(dirname(__FILE__).’/..’).’/file.bla’

  8. samir

    is there any way to get the constants defined in a php file using
    define()?


Be Heard!

Share your thoughts without being a jerk! And wrap your code in <code> tags, f00!

Name*:
Email*:
Website: