本文整理汇总了PHP中Nette\Environment::enterCriticalSection方法的典型用法代码示例。如果您正苦于以下问题:PHP Environment::enterCriticalSection方法的具体用法?PHP Environment::enterCriticalSection怎么用?PHP Environment::enterCriticalSection使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Nette\Environment
的用法示例。
在下文中一共展示了Environment::enterCriticalSection方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: save
/**
* Writes item into the cache.
* Dependencies are:
* - Cache::PRIORITY => (int) priority
* - Cache::EXPIRE => (timestamp) expiration
* - Cache::SLIDING => (bool) use sliding expiration?
* - Cache::TAGS => (array) tags
* - Cache::FILES => (array|string) file names
* - Cache::ITEMS => (array|string) cache items
* - Cache::CONSTS => (array|string) cache items
*
* @param string key
* @param mixed value
* @param array dependencies
* @return mixed value itself
* @throws \InvalidArgumentException
*/
public function save($key, $data, array $dp = NULL)
{
if (!is_string($key) && !is_int($key)) {
throw new \InvalidArgumentException("Cache key name must be string or integer, " . gettype($key) . " given.");
}
$this->key = (string) $key;
$key = $this->namespace . self::NAMESPACE_SEPARATOR . $key;
// convert expire into relative amount of seconds
if (!empty($dp[Cache::EXPIRE])) {
$dp[Cache::EXPIRE] = Nette\Tools::createDateTime($dp[Cache::EXPIRE])->format('U') - time();
}
// convert FILES into CALLBACKS
if (isset($dp[self::FILES])) {
//clearstatcache();
foreach ((array) $dp[self::FILES] as $item) {
$dp[self::CALLBACKS][] = array(array(__CLASS__, 'checkFile'), $item, @filemtime($item));
// @ - stat may fail
}
unset($dp[self::FILES]);
}
// add namespaces to items
if (isset($dp[self::ITEMS])) {
$dp[self::ITEMS] = (array) $dp[self::ITEMS];
foreach ($dp[self::ITEMS] as $k => $item) {
$dp[self::ITEMS][$k] = $this->namespace . self::NAMESPACE_SEPARATOR . $item;
}
}
// convert CONSTS into CALLBACKS
if (isset($dp[self::CONSTS])) {
foreach ((array) $dp[self::CONSTS] as $item) {
$dp[self::CALLBACKS][] = array(array(__CLASS__, 'checkConst'), $item, constant($item));
}
unset($dp[self::CONSTS]);
}
if ($data instanceof Nette\Callback || $data instanceof \Closure) {
Nette\Environment::enterCriticalSection('Nette\\Caching/' . $key);
$data = $data->__invoke();
Nette\Environment::leaveCriticalSection('Nette\\Caching/' . $key);
}
if (is_object($data)) {
$dp[self::CALLBACKS][] = array(array(__CLASS__, 'checkSerializationVersion'), get_class($data), Nette\Reflection\ClassReflection::from($data)->getAnnotation('serializationVersion'));
}
$this->data = $data;
if ($data === NULL) {
$this->storage->remove($key);
} else {
$this->storage->write($key, $data, (array) $dp);
}
return $data;
}