Note that define don't care at all about the constant name, you can give everything as a constant name, even if the PHP documentation says that the allowed characters are [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
Just try this :
<?php define('anything::()$', 'test'); ?>
You won't be able to access this constant though, it will throw a parse error, either through constant() or define(), but if you do that :
<?php print_r(get_defined_constants()); ?>
You will see that the constant is registered at the end of the array. Yes that's totally useless. But you can try other things that will work with constant() :
<?php define('...', 'test'); echo constant('...'); ?>
Will echo 'test'. Yeah that's a pretty strange behavior.
And please note that defining object constants outside of objets don't work :
<?php
class myObject { }
define('myObject::CONSTANT', 'test');
?>
define
(PHP 4, PHP 5)
define — Define uma constante
Descrição
Define uma constante.
Parâmetros
- name
-
O nome da constante.
- value
-
O valor da constante; somente escalar e valores null são permitidos. Valores escalares são integer, float, string ou boolean.
- case_insensitive
-
Se definido para TRUE, a constante será definida case-insensitive. O comportamento padrão é case-sensitive; i.e. CONSTANT e Constant representam valores diferentes.
Valor Retornado
Retorna TRUE em caso de sucesso ou FALSE em falhas.
Exemplos
Exemplo #1 Definindo Constantes
<?php
define("CONSTANTE", "Alô Mundo.");
echo CONSTANTE; // mostra "Alô Mundo."
echo Constante; // mostra "Constante" e dá um aviso.
define("GREETING", "Alô Você.",TRUE);
echo GREETING; // mostra "Alô você."
echo Greeting; // mostra "Alô você."
?>
Veja Também
- defined() - Confere se uma constante existe
- constant() - Retorna o valor de uma constante
- The section on Constants
User Contributed Notes
define
define
bohwaz.net
15-Aug-2009 09:54
15-Aug-2009 09:54
Anonymous
20-Jul-2009 02:31
20-Jul-2009 02:31
My notice to: redeclare define - it is possible
php -v
--> PHP 5.2.6-3ubuntu4.1 with Suhosin-Patch 0.9.6.2
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
php -r "define('TEST','foo',true);
var_dump(TEST);
define('TEST','bar');
var_dump(TEST);"
string(3) "foo"
string(3) "bar"
greetings
sixd at php dot net
17-Jul-2009 06:24
17-Jul-2009 06:24
A note on redefining:
Constants can't be redefined:
$ php -r "define('A', 1); var_dump('A'); define('A', 2); var_dump('A');";
string(1) "A"
PHP Notice: Constant A already defined in Command line code on line 1
string(1) "A"
But using the case insensitive setting shows that the internal
representation is lower case:
$ php -r "define('A', 1, true); var_dump('A'); define('A', 2); var_dump('A');";
string(1) "A"
string(1) "A"
Note the lower case 'a' in the second define() here:
$ php -r "define('A', 1, true); var_dump('A'); define('a', 2); var_dump('A');";
string(1) "A"
PHP Notice: Constant a already defined in Command line code on line 1
string(1) "A"
danbettles at yahoo dot co dot uk
14-Apr-2009 03:56
14-Apr-2009 03:56
define() will define constants exactly as specified. So, if you want to define a constant in a namespace, you will need to specify the namespace in your call to define(), even if you're calling define() from within a namespace. The following examples will make it clear.
The following code will define the constant "MESSAGE" in the global namespace (i.e. "\MESSAGE").
<?php
namespace test;
define('MESSAGE', 'Hello world!');
?>
The following code will define two constants in the "test" namespace.
<?php
namespace test;
define('test\HELLO', 'Hello world!');
define(__NAMESPACE__ . '\GOODBYE', 'Goodbye cruel world!');
?>
Aldonio
27-Mar-2009 01:24
27-Mar-2009 01:24
This code will define every key of an array, and if its a multidimentional array it will define it as parent_child1_child2_etc.
<?php
function define_array( $array, $keys = NULL )
{
foreach( $array as $key => $value )
{
$keyname = ($keys ? $keys . "_" : "") . $key;
if( is_array( $array[$key] ) )
define_array( $array[$key], $keyname );
else
define( $keyname, $value );
}
}
?>
ceo at l-i-e dot com
11-Mar-2009 07:04
11-Mar-2009 07:04
In PHP 4.4.9, you cannot use certain names for constants.
Specifically, reserved words such as 'PRINT', 'IF', etc.
Oddly enough, you get different behaviour for some:
<?php
define('IF', 42);
echo "IF: ", IF, "<hr />\n";
?>
yields PHP Parse error: syntax error, unexpected T_IF
<?php
define('PRINT', 13);
echo "PRINT: ", PRINT, "<hr />\n";
?>
yields PHP Parse error: syntax error, unexpected ')'
Not sure if this is still true in PHP 5 or not, but it's worth noting if it is.
Anonymous
09-Mar-2009 06:03
09-Mar-2009 06:03
With php 5.30 it is possible to make some "restrictions", in case u use namespaces...
The following function allows only uppercase and, if 3 param isset, gives E_USER_ERROR instead of E_NOTICE:
<?php
namespace bla;
function define($c,$v,$x=false) {
$c = strtoupper($c);
if (!defined($c)) {
// not to use \define here, as the syntax highlighting does not work correctly here...
return define($c, $v, true);
} else if ($x == true) {
trigger_error('setting constant "'.$c.'" is not allowed', E_USER_ERROR);
}
return null;
}
define('PHP_VERSION', '1');
define('PHP_VERSION', '1') || trigger_error('constant already defined', E_USER_NOTICE);
define('PHP_VERSION', '1', true);
?>
jv at vip dot ie
08-Mar-2009 09:14
08-Mar-2009 09:14
Probably the most efficient way of creating a constant array is to put it in a function like this:
<?php
function my_const_arr()
{
return array
(
'key1' => 'val 1',
'key2' => 'va' 2
);
}
?>
Then use at will like so...
<?php $my_const_arr = my_const_arr(); ?>
usuroer dot king at hotmail dot co dot uk
08-Mar-2009 09:15
08-Mar-2009 09:15
Referring to "This-Is-A-Test" constant below.
When echoing it the script thinks you performing a series of minus (subtraction) thus since THIS and IS, A, TEST are not defined they are 0 by default. So 0-0-0-0 = 0.
As explained that a hyphen cannot be used within a variable.
downwind at web dot de
02-Feb-2009 02:48
02-Feb-2009 02:48
I'm reffering to the note below by mittiprovence.
The described behavior has nothing to do with the fact that there is a constant in the condition.
Comparing a non-numeric string to the integer 0 by using == will return true, since the string will be casted to integer - which will be zero. If your string starts with a number, it will be castet to an integer with the number as value.
To avoid the described behavior, you should use === instead of ==.
Finally, the behavior discribed by mittiprovence is exacly the expected behavior as defined in the manual.
For further information read the manual:
http://www.php.net/manual/en/types.comparisons.php
http://www.php.net/manual/en/language.operators.comparison.php
http://www.php.net/manual/en/language.types.string.php #language.types.string.conversion
<?php
if (0 == "some string") { // is true
echo "0 == 'some string'";
}
if (1 == "some string") { // is false
echo "1 == 'some string'";
}
if (1 == "1 some string") { // is true
echo "1 == '1 some string'";
}
if (0 === "some string") { // is false
echo "0 === 'some string'";
}
?>
eparkerii at carolina dot rr dot com
22-Oct-2008 05:01
22-Oct-2008 05:01
Found something interesting. The following define:
<?php
define("THIS-IS-A-TEST","This is a test");
echo THIS-IS-A-TEST;
?>
Will return a '0'.
Whereas this:
<?php
define("THIS_IS_A_TEST","This is a test");
echo THIS_IS_A_TEST;
?>
Will return 'This is a test'.
This may be common knowledge but I only found out a few minutes ago.
[EDIT BY danbrown AT php DOT net: The original poster is referring to the hyphens versus underscores. Hyphens do not work in defines or variables, which is expected behavior.]
pistachio
01-Sep-2008 08:41
01-Sep-2008 08:41
A better solution to that of thscheer at web dot de, is to simply serialize the array.
for example:
<?php
$fruits = array("apple", "banana", "orange");
define("FRUITS", serialize($fruits));
// Now to use it
$my_fruits = unserialize(FRUITS);
?>
As you can see this is a much simpler and more efficient way to stuff arrays into constants.
jan at webfontein dot nl
27-Jul-2008 09:20
27-Jul-2008 09:20
For translating with variables and define, take also a look on the constant() function.
Example :
<?php
define('PAYMENT_IDEAL',"iDEAL Payment ( NL only )");
define('PAYMENT_MASTERCARD',"Mastercard Payment ( international )");
$payparam='MASTERCARD';
echo constant("PAYMENT_$payparam");
// output :
// Mastercard Payment ( international )
?>
thscheer at web dot de
20-Jun-2008 06:18
20-Jun-2008 06:18
How to define an array as constant with define?
there is a simple way to define an array of values as constant...
just
define ("constant-name","value1,value2,value3,value4");
$t_array = preg_split('/,/', constant(constant-name), -1, PREG_SPLIT_NO_EMPTY);
var_dump($t_array);
array(4) { [0]=> string(6) "value1" [1]=> string(6) "value2" [2]=> string(6) "value3" [3]=> string(6) "value4" }
Now you can iterate over the array defined as constant ...
ceo at l-i-e dot com
05-May-2008 12:30
05-May-2008 12:30
I'm not sure if it's version dependent, but apparently this works:
define('APPLICATION_NOW', time());
This can be quite handy for time-dependent code...
You can then do:
class foo {
$private now = APPLICATION_NOW;
}
and have a consistent time-stamp across the application, which is nice.
Works for me in 5.2.5
I didn't think it worked before...
jason@sitehatchery dot com
25-Apr-2008 03:28
25-Apr-2008 03:28
You can store your constant as the value of a variable like this:
$variable=VARIABLE;
To access the constant, do this: constant($variable).
Beware: if your variable changes, then you loose your reference to the constant - but the constant itself will not change.
I've found this especially useful for storing the constant string (i.e. VARIABLE) in a database.
rayro at gmx dot de
15-Sep-2007 06:53
15-Sep-2007 06:53
just a note to the previous post by e s lin d sey at g mail dot co m:
Well as u said, it is not the best workaround. To resolve this "Problem" without getting incredible loss of performance, you are able to make the use of "variable functions" like "variable variables":
<?php
$def = 'constant';
$string = <<<END
This is PHP running on<br />
{$def('PHP_OS')}
END;
var_dump($string);
?>
In this example we make use of the "constant" function which is builtin, and it will output:
string(37) " This is PHP running on
WINNT"
Tested on PHP 5...
Best regards
e s lin d sey at g mail dot co m
13-Aug-2007 05:38
13-Aug-2007 05:38
Constants can't be referenced from within quotes or (more importantly IMHO) from within HEREDOC syntax. This is a huge drawback in my opinion. Here's two of my workarounds:
<?php
//PHP5 only -- more efficient
$constarray = get_defined_constants(true);
foreach($constarray['user'] as $key => $val)
eval(sprintf('$_CONSTANTS[\'%s\'] = \'%s\';', addslashes($key), addslashes($val)));
//PHP4+ -- less efficient because it defines (potentially) hundreds of unnecessary constants
foreach(get_defined_constants() as $key => $val)
eval(sprintf('$_CONSTANTS[\'%s\'] = \'%s\';', addslashes($key), addslashes($val)));
?>
Now you can refer to your defined constants using the $_CONSTANTS array. Note that because this is NOT a superglobal, a few caveats apply:
<?php
//run code snippet here to define $_CONSTANTS in global scope...
$mv = $_CONSTANTS['FOO']; //works
function my_function1()
{
$mv = $_CONSTANTS['BAR']; //doesn't work! not defined!
}
function my_function2()
{
global $_CONSTANTS;
$mv = $_CONSTANTS['BAR']; //ah, this works!
}
?>
I realize this is not ideal, either for performance or for convenience of being able to refer to constants without regard to scope, but it is a workaround that works. Depending on your application, it may be easier to shift your paradigm a bit and use the following method instead, declaring your constants as variables first:
<?php
//first, define our constants...
$_CONSTANTS['FOO'] = 'bar';
$_CONSTANTS['BAR'] = 'foo';
//now, turn them into real constants...
foreach($_CONSTANTS as $key => $val)
define($key, $val);
//now, you can use either format to refer to a constant
print($_CONSTANTS['FOO']); //prints 'bar'
print(FOO); //prints 'bar'
print("$_CONSTANTS['FOO']"); //prints 'bar'
//prints 'blah bar blah'
print <<<EOF
blah {$_CONSTANTS['FOO']} blah
EOF;
?>
Hope this helps some of you out there, I know being able to utilize my constants in HEREDOC helped me a ton!
smifffy at smith-net dot org dot uk
25-Jul-2007 08:23
25-Jul-2007 08:23
a basic function to auto assign a numeric value that increase by itself each time - used in some permission style scripts
<?php
function define_bitwise($constant_name, $reset = False)
{
static $bitwise_next = 1;
if ( $reset === True )
{
$bitwise_next = 1;
}
define($constant_name, $bitwise_next);
$bitwise_next += $bitwise_next;
}
?>
when reset it set to True, resets that value to 1 and starts afresh
creeves at dja dot com
19-Jul-2007 10:59
19-Jul-2007 10:59
Intersting to note:
I found this in php5 on windows
If you try to unset a constant (which you cant but maybe you have a Jr. programmer or something). The error message that is thrown is:
<?php
define ("SOME_CONSTANT", true);
unset (SOME_CONSTANT);
?>
Parse error: parse error, unexpected ')', expecting T_PAAMAYIM_NEKUDOTAYIM
nl-x at bita dot nl
09-Jul-2007 02:34
09-Jul-2007 02:34
Watch out. You can define a new constant with the name NULL with define("NULL","FOO");. But you must use the function constant("NULL"); to get it's value. NULL without the function call to the constant() function will still retrieve the special type NULL value.
Within a class there is no problem, as const NULL="Foo"; will be accessible as myClass::NULL.
stangelanda at arrowquick dot com
01-Jan-2007 12:59
01-Jan-2007 12:59
An improvement on the function from bobbykjack at yahoo dot co dot uk on the concept by richard dot quadling at bandvulc dot co dot uk:
<?php
function adefine($constant_name, $value=null) {
static $increment = 0; // 1 for bitmask
if (is_null($value)) {
define($constant_name, ++$increment); // $increment=$increment<<1 for bitmask
} else {
define($constant_name, $value);
if (is_numeric($value)) {
$increment = $value;
}
}
}
?>
If you pass it a second argument it defines it normally, and resets the increment if the value is numeric. This way the function can replace define, and you can reset the counter for a new set of constants.
<?php
adefine ('RULE_CALLBACK_FORMAT', 1); // 1
adefine ('RULE_CHANGE_CALLBACK_ON_ERROR'); // 2
adefine ('RULE_CHANGE_COMPARE_DATE'); // 3
adefine('KEYWORD', 'hodgepodge'); // hodgepodge <-- defined normally
adefine ('RULE_CHANGE_ON_DATE'); // 4
adefine ('ERROR_DESC', 1); // 1 <-- Counter reset
adefine ('ERROR_EXPECTED_RESULT'); // 2
?>
12-Feb-2005 02:45
Better pack with define() for all who really miss Java package management:
Use this "manifest.php" on very first script start or copy it to your config.somehow.php.
<?php
$__packages = array(
"org.ilove.java.more",
"org.ilove.python.too",
"net.php.isok"
);
define("C_IS_WINDOWS", false);
define("C_DIR", (C_IS_WINDOWS ? "\\" : "/"));
define("C_PATH_ROOT", str_replace("/", C_DIR, $_SERVER["DOCUMENT_ROOT"]).C_DIR);
define("C_PATH_CORE", C_PATH_ROOT."core".C_DIR);
define("C_PATH_CLASS", C_PATH_CORE."classes".C_DIR);
define("C_APPLICATION_BASE", C_PATH_CORE.C_DIR."application".C_DIR);
$total_packages = 0;
$i = sizeof($__packages);
while($i-- > 0) {
$tokens = explode(".", $__packages[$i]);
$j = sizeof($tokens);
while($j-- > 0) {
$token = strtolower(trim($tokens[$j]));
if(strlen($token) > 0 && !defined($token)) {
define($token, ($j == 0 ? C_PATH_CLASS : "").$tokens[$j].C_DIR);
$total_packages++;
}
}
}
define("C_PACKAGE_COUNT", $total_packages);
?>
With restrictions on non-package constants, you now can call your files like that:
<?php
require_once org.ilove.java.more."Than.php";
?>
Regards
Robi
phpnet at trenkner dot de
14-Mar-2003 08:59
14-Mar-2003 08:59
---[Editor's Note]---
As of PHP 5.0.0 this is possible. You can define class-only constants, which can be called like Foo::Constant1 from the outside
---[End Note]---
Please keep in mind that
class AClass {
define ("Const1", "Value1");
... }
didn't work. You have to make all your constant definitions before you open the class. So
define ("Const1", "Value1");
class AClass {
... }
would be correct.
radovan dot biciste at managestar dot com
07-Nov-2001 02:45
07-Nov-2001 02:45
Wonder how to work with variable which name is stored in a constant?
Here it is:
<?php
define("VAR_NAME","test");
// assigning value
${VAR_NAME} = "value";
// getting value back
echo ${VAR_NAME};
?>
ste at opk dot no
29-Aug-2001 02:41
29-Aug-2001 02:41
To use a constant to show an element of an array inside a string:
define ('C', 0); print ("element 0: {$a[C]}");
The { & } around the variable signals that what's inside should be treated as a variable and not a string.
Note that 'print ("a constant:{C}");' wont work as ZERO is a constant.

constant