It doesn't introduce much overhead if you make use of conditional function definitions:
<?php
if (function_exists('apc_load_constants')) {
function define_array($key, $arr, $case_sensitive = true)
{
if (!apc_load_constants($key, $case_sensitive)) {
apc_define_constants($key, $arr, $case_sensitive);
}
}
} else {
function define_array($key, $arr, $case_sensitive = true)
{
foreach ($arr as $name => $value)
define($name, $value, $case_sensitive);
}
}
//in your code you just write something like this:
define_array('NUMBERS', Array('ONE' => 1, 'TWO' => 2, 'THREE' => 3));
?>
apc_define_constants
(PECL apc >= 3.0.0)
apc_define_constants — Defines a set of constants for retrieval and mass-definition
Description
$key
, array $constants
[, bool $case_sensitive = true
] )define() is notoriously slow. Since the main benefit of APC is to increase the performance of scripts/applications, this mechanism is provided to streamline the process of mass constant definition. However, this function does not perform as well as anticipated.
For a better-performing solution, try the » hidef extension from PECL.
Note: To remove a set of stored constants (without clearing the entire cache), an empty array may be passed as the
constantsparameter, effectively clearing the stored value(s).
Parameters
-
key -
The
keyserves as the name of the constant set being stored. Thiskeyis used to retrieve the stored constants in apc_load_constants(). -
constants -
An associative array of constant_name => value pairs. The constant_name must follow the normal constant naming rules. value must evaluate to a scalar value.
-
case_sensitive -
The default behaviour for constants is to be declared case-sensitive; i.e. CONSTANT and Constant represent different values. If this parameter evaluates to
FALSEthe constants will be declared as case-insensitive symbols.
Return Values
Returns TRUE on success or FALSE on failure.
Examples
Example #1 apc_define_constants() example
<?php
$constants = array(
'ONE' => 1,
'TWO' => 2,
'THREE' => 3,
);
apc_define_constants('numbers', $constants);
echo ONE, TWO, THREE;
?>
The above example will output:
123
See Also
- apc_load_constants() - Loads a set of constants from the cache
- define() - Defines a named constant
- constant() - Returns the value of a constant
- Or the PHP constants reference
An observation that I've made is that the nature of apc_define_constants() binding the list of constants to a key and then requiring that key to load the constants is limiting. Furthermore, there's no way to append additional constants to a given key.
A solution that I've been adopting is to build a list of constants to be defined, and then do one of two things:
1) if APC is enabled, then use apc_define_constants();
2) ...else loop through the list and define each constant normally.
The problem I've run into is when this process happens at different places in a large application, it can introduce overhead that otherwise wouldn't be there if it was possible to append to an existing list of defined constants in APC.
