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

By  on  

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?

Recent Features

  • By
    I’m an Impostor

    This is the hardest thing I've ever had to write, much less admit to myself.  I've written resignation letters from jobs I've loved, I've ended relationships, I've failed at a host of tasks, and let myself down in my life.  All of those feelings were very...

  • By
    Create a CSS Cube

    CSS cubes really showcase what CSS has become over the years, evolving from simple color and dimension directives to a language capable of creating deep, creative visuals.  Add animation and you've got something really neat.  Unfortunately each CSS cube tutorial I've read is a bit...

Incredible Demos

  • By
    Web Audio API

    The Web Audio API allows developers to load and decode audio on demand using JavaScript.  The more I evaluate awesome games for Firefox OS TVs, the more I get to learn about these APIs that I normally wouldn't touch.  The following is a very basic introduction to the WebAudio API...

  • By
    MooTools-Like Element Creation in jQuery

    I really dislike jQuery's element creation syntax. It's basically the same as typing out HTML but within a JavaScript string...ugly! Luckily Basil Goldman has created a jQuery plugin that allows you to create elements using MooTools-like syntax. Standard jQuery Element Creation Looks exactly like writing out...

Discussion

  1. 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. Wow, awesome usage of the __FILE__ magic constant — I hadn’t thought of that one!

  3. Jaime

    Useful!

  4. 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. 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. is there any way to get the constants defined in a php file using
    define()?

  9. I have never seen the use of __FUNCTION__
    Can give me any Example.

  10. Allan Peda

    I make it a habit to wrap these magic constants into SQL and PL/SQL blocks so that I can quickly trace the construction of queries and DML to the source.

  11. There’s also the __NAMESPACE__ constant, e.g.

    namespace hyperdrive;
    add_action('wp_head', __NAMESPACE__ .'\engage');
    

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!