defined

(PHP 4, PHP 5, PHP 7)

definedPrüft, ob eine benannte Konstante existiert

Beschreibung

bool defined ( string $name )

Überprüft, ob die angegebene Konstante existiert und definiert ist.

Hinweis:

defined() gilt nur für Konstanten. Verwenden Sie isset(), falls Sie wissen wollen, ob eine Variable existiert. Um zu überprüfen, ob eine Funktion existert, verwenden Sie function_exists().

Parameter-Liste

name

Der Name der Konstante

Rückgabewerte

Wenn die durch name angegebene Konstante definiert ist, wird TRUE zurückgegeben, ansonsten FALSE.

Beispiele

Beispiel #1 Konstanten überprüfen

<?php
/* Beachten Sie die Verwendung von Anführungsstrichen. Das ist wichtig!
 * In diesem Beispiel wird überprüft, ob die Zeichenkette 'TEST' der Name
 * einer Konstante namens TEST ist */
if (defined('TEST')) {
    echo 
TEST;
}
?>

Siehe auch

add a note add a note

User Contributed Notes 13 notes

up
53
daniel at neville dot tk
8 years ago
My preferred way of checking if a constant is set, and if it isn't - setting it (could be used to set defaults in a file, where the user has already had the opportunity to set their own values in another.)

<?php

defined
('CONSTANT') or define('CONSTANT', 'SomeDefaultValue');

?>

Dan.
up
21
r dot hartung at roberthartung dot de
7 years ago
You can use the late static command "static::" withing defined as well. This example outputs - as expected - "int (2)"

<?php
 
abstract class class1
 
{
    public function
getConst()
    {
      return
defined('static::SOME_CONST') ? static::SOME_CONST : false;
    }
  }
 
  final class
class2 extends class1
 
{
    const
SOME_CONST = 2;
  }
 
 
$class2 = new class2;
 
 
var_dump($class2->getConst());
?>
up
12
Lars Lernestal
5 years ago
if you want to check id a class constant is defined use self:: before the constant name:

<?php
defined
('self::CONSTANT_NAME');
?>
up
14
tris+php at tfconsulting dot com dot au
8 years ago
Before using defined() have a look at the following benchmarks:

true                                       0.65ms
$true                                      0.69ms (1)
$config['true']                            0.87ms
TRUE_CONST                                 1.28ms (2)
true                                       0.65ms
defined('TRUE_CONST')                      2.06ms (3)
defined('UNDEF_CONST')                    12.34ms (4)
isset($config['def_key'])                  0.91ms (5)
isset($config['undef_key'])                0.79ms
isset($empty_hash[$good_key])              0.78ms
isset($small_hash[$good_key])              0.86ms
isset($big_hash[$good_key])                0.89ms
isset($small_hash[$bad_key])               0.78ms
isset($big_hash[$bad_key])                 0.80ms

PHP Version 5.2.6, Apache 2.0, Windows XP

Each statement was executed 1000 times and while a 12ms overhead on 1000 calls isn't going to have the end users tearing their hair out, it does throw up some interesting results when comparing to if(true):

1) if($true) was virtually identical
2) if(TRUE_CONST) was almost twice as slow - I guess that the substitution isn't done at compile time (I had to double check this one!)
3) defined() is 3 times slower if the constant exists
4) defined() is 19 TIMES SLOWER if the constant doesn't exist!
5) isset() is remarkably efficient regardless of what you throw at it (great news for anyone implementing array driven event systems - me!)

May want to avoid if(defined('DEBUG'))...
up
12
vindozo at gmail dot com
6 years ago
If you wish to protect files from direct access I normally use this:

index.php:

<?php
// Main stuff here
define('START',microtime());

include
"x.php";
?>

x.php:

<?php
defined
('START')||(header("HTTP/1.1 403 Forbidden")&die('403.14 - Directory listing denied.'));
?>
up
9
passerbyxp at gmail dot com
4 years ago
This function, along with constant(), is namespace sensitive. And it might help if you imagine them always running under the "root namespace":

<?php
namespace FOO\BAR
{
    const
WMP="wmp";
    function
test()
    {
        if(
defined("WMP")) echo "direct: ".constant("WMP"); //doesn't work;
       
elseif(defined("FOO\\BAR\\WMP")) echo "namespace: ".constant("FOO\\BAR\\WMP"); //works
       
echo WMP; //works
   
}
}
namespace
{
    \
FOO\BAR\test();
}
up
7
Shaun H
9 years ago
I saw that PHP doesn't have an enum function so I created my own. It's not necessary, but can come in handy from time to time.

<?php
   
function enum()
    {
       
$args = func_get_args();
        foreach(
$args as $key=>$arg)
        {
            if(
defined($arg))
            {
                 die(
'Redefinition of defined constant ' . $arg);
            }

           
define($arg, $key);
        }
    }
   
   
enum('ONE','TWO','THREE');
    echo
ONE, ' ', TWO, ' ', THREE;
?>
up
3
Joel
9 years ago
If your constants don't show up in your included or required files, then you probably have php safe mode turned on!

I ran into this problem, I forgot to turn of safe mode when I was creating a new site.
up
4
ndove at cox dot net
12 years ago
In PHP5, you can actually use defined() to see if an object constant has been defined, like so:

<?php

class Generic
{
    const
WhatAmI = 'Generic';
}

if (
defined('Generic::WhatAmI'))
{
    echo
Generic::WhatAmI;
}

?>

Thought it may be useful to note.

-Nick
up
3
reachmike at hotpop dot com
8 years ago
You may find that if you use <?= ?> to dump your constants, and they are not defined, depending on your error reporting level, you may not display an error and, instead, just show the name of the constant. For example:

<?= TEST ?>

...may say TEST instead of an empty string like you might expect. The fix is a function like this:

<?php

function C(&$constant) {
   
$nPrev1 = error_reporting(E_ALL);
   
$sPrev2 = ini_set('display_errors', '0');
   
$sTest = defined($constant) ? 'defined' : 'not defined';
   
$oTest = (object) error_get_last();
   
error_reporting($nPrev1);
   
ini_set('display_errors', $sPrev2);
    if (
$oTest->message) {
        return
'';
    } else {
        return
$constant;
    }
}

?>

And so now you can do:

<?= C(TEST) ?>

If TEST was assigned with define(), then you'll receive the value. If not, then you'll receive an empty string.

Please post if you can do this in fewer lines of code or do something more optimal than toggling the error handler.
up
1
info at daniel-marschall dot de
7 years ago
I found something out: defined() becomes probably false if a reference gets lost.

<?php

session_start
(); // $_SESSION created
define('SESSION_BACKUP', $_SESSION);
if (
defined('SESSION_BACKUP')) echo 'A';
session_unset(); // $_SESSION destroyed
if (defined('SESSION_BACKUP')) echo 'B';

?>

You will see "A", but not "B".
up
0
Dawid Krysiak
23 days ago
It may be obvious (but I haven't found it written literally nowhere), that checking if the class constant is defined using defined() function, tries to autoload the class in which the constant is defined (if the class is not already loaded). At least in my php 5.5.9.

<?php
if (defined('vendor\\package\\SomeClass::MAJOR')) { // autoloading here
   
echo 'Oh, I know how to recognize major stuff!'. PHP_EOL;
}
?>
up
0
ASchmidt at Anamera dot net
28 days ago
// Checking the existence of a class constant, if the class is referenced by a variable.

class Class_A
{
    const CONST_A = 'value A';
}

// When class name is known.
if ( defined( 'Class_A::CONST_A' ) )
    echo 'Class_A::CONST_A defined';

// Using a class name variable. Note the double quotes.
$class_name = Class_A::class;
if ( defined( "$class_name::CONST_A" ) )
    echo '$class_name::CONST_A defined';

// Using an instantiated object for a variable class.
$object_A = new $class_name();
if ( defined( get_class($object_A).'::CONST_A' ) )
    echo '$object_A::CONST_A defined';
To Top