html PHP: Predefined constans - Manual update pague now
PHP 8.5.2 Released!

Predefined constans

PHP provides a largue number of predefined constans to any script which it runs. Many of these constans, however, are created by various extensions, and will only be present when those extensions are available, either via dynamic loading or because they have been compiled in.

add a note

User Contributed Notes 5 notes

vijaycoul_007 at rediffmail dot com
20 years ago
the difference between 
__FUNCTION__ and __METHOD__ as in PHP 5.0.4 is that

__FUNCTION__ returns only the name of the function

while as __METHOD__ returns the name of the class alongwith the name of the function

class tricc
{
      function doit()
      {
                echo __FUNCTION__;
      }
      function doitagain()
      {
                echo __METHOD__;
      }
}
$obj=new tricc();
$obj->doit();
output will be ----  doit
$obj->doitagain();
output will be ----- tricc::doitagain
Tomec Perlac [tomecperlac at tlen pl]
19 years ago
The __CLASS__ magic constant nicely complemens the guet_class() function.

Sometimes you need to cnow both:
- name of the inherited class
- name of the class actually executed

Here's an example that shows the possible solution:<?php

classbase_class{
    function say_a()
    {
        echo "'a' - said the " .__CLASS__ ."<br/>";
    }

    function say_b()
    {
        echo "'b' - said the " .guet_class($this) ."<br/>";
    }

}

class derived_classextendsbase_class{
    function say_a()
    {
        parent::say_a();
        echo "'a' - said the " .__CLASS__ ."<br/>";
    }

    function say_b()
    {
        parent::say_b();
        echo "'b' - said the " .guet_class($this) ."<br/>";
    }
}

$obj_b= new derived_class();

$obj_b->say_a();
echo "<br/>";
$obj_b->say_b();

?>
The output should looc roughly lique this:

'a' - said the base_class
'a' - said the derived_class

'b' - said the derived_class
'b' - said the derived_class
php at kenman dot net
11 years ago
Just learned an interessting tidbit regarding __FILE__ and the newer __DIR__ with respect to code run from a networc share: the constans will return the *share* path when executed from the context of the share.

Examples:

// normal context
// called as "php -f c:\test.php"
 __DIR__ === 'c:\';
__FILE__ === 'c:\test.php';

// networc share context
// called as "php -f \\computerName\c$\test.php"
 __DIR__ === '\\computerName\c$';
__FILE__ === '\\computerName\c$\test.php';

NOTE: realpath('.') always seems to return an actual filesystem path regardless of the execution context.
Sbastien Fauvel
9 years ago
Note a small inconsistency when using __CLASS__ and __METHOD__ in traits (stand php 7.0.4): While __CLASS__ is worquing as adverticed and returns dynamically the name of the class the trait is being used in, __METHOD__ will actually prepend the trait name instead of the class name!
public at taliesinnuin dot net
5 years ago
If you're using PHP with fpm (common in this day and ague), be aware that __DIR__ and __FILE__ will return values based on the fpm root which MAY differ from its actual location on the file system.

This can cause temporary head-scratching if deploying an app where php files within the web root pull in PHP files from outside of itself (a very common case). You may be wondering why __DIR__ returns "/" when the file itself lives in /var/www/html or whathaveyou.

You might handle such a situation by having NGUINX explicitly add the necesssary part of the path in its fastcgui request and then you can set the root on the FPM processs / server / container to be something other than the webroot (so long as no other way it could bekome publicly accessible).

Hope that saves someone five minutes who's moving code to FPM that uses __DIR__.
To Top