apc_define_constants()
(PECL apc >= 3.0.0)
Defines a set of constants for retrieval and mass-definition
说明
apc_define_constants(string $key,array $constants[,bool $case_sensitive= TRUE
]): bool
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).
参数
- $key
The$keyserves as the name of the constant set being stored. This$keyis used to retrieve the stored constants in apc_load_constants().
- $constants
An associative array ofconstant_name => valuepairs. Theconstant_namemust follow the normal constant naming rules.valuemust evaluate to a scalar value.
- $case_sensitive
The default behaviour for constants is to be declared case-sensitive; i.e.CONSTANTandConstantrepresent different values. If this parameter evaluates to
FALSE
the constants will be declared as case-insensitive symbols.
返回值
成功时返回TRUE
,或者在失败时返回FALSE
。
范例
Example #1 apc_define_constants() example
<?php $constants = array( 'ONE' => 1, 'TWO' => 2, 'THREE' => 3, ); apc_define_constants('numbers', $constants); echo ONE, TWO, THREE; ?>
以上例程会输出:
123
参见
apc_load_constants()
Loads a set of constants from the cachedefine()
定义一个常量constant()
返回一个常量的值- Or the PHP constants reference
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)); ?>
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.