Make WordPress Core

Ticket #20875: 20875-implementation-apc.php

File 20875-implementation-apc.php, 1.6 KB (added by boonebgorges, 10 years ago)
Line 
1<?php
2
3public function get_multi( $keys ) {
4 $values = $fetch_keys = $key_map = array();
5 foreach ( $keys as $group => $group_keys ) {
6 foreach ( $group_keys as $group_key ) {
7 $key = $this->key( $group_key, $group );
8
9 if ( isset( $this->cache[ $key ] ) && in_array( $group, $this->no_mc_groups ) ) {
10 if ( is_object( $this->cache[ $key ] ) ) {
11 $values[ $group ][ $group_key ] = clone $this->cache[ $key ];
12 } else {
13 $values[ $group ][ $group_key ] = $this->cache[ $key ];
14 }
15 } elseif ( in_array( $group, $this->no_mc_groups ) ) {
16 $this->cache[ $key ] = $values[ $group ][ $group_key ] = false;
17 } else {
18 $fetch_keys[] = $key;
19 $key_map[ $key ] = array(
20 'group' => $group,
21 'group_key' => $group_key,
22 );
23 }
24 }
25 }
26
27 $values = array();
28
29 if ( $fetch_keys ) {
30 $fetched = apc_fetch( $fetch_keys );
31
32 foreach ( $fetch_keys as $fetch_key ) {
33 $group = $key_map[ $fetch_key ]['group'];
34 $group_key = $key_map[ $fetch_key ]['group_key'];
35
36 if ( isset( $fetched[ $fetch_key ] ) ) {
37 $fetched_value = $fetched[ $fetch_key ];
38 if ( is_object( $fetched_value ) && 'ArrayObject' == get_class( $fetched_value ) ) {
39 $fetched_value = $fetched_value->getArrayCopy();
40 }
41
42 if ( null === $fetched_value ) {
43 $fetched_value = false;
44 }
45
46 $this->cache[ $key ] = ( is_object( $fetched_value ) ) ? clone $fetched_value : $fetched_value;
47 $values[ $group ][ $group_key ] = $this->cache[ $key ];
48
49 } else {
50 $this->cache[ $key ] = false;
51 $values[ $group ][ $group_key ] = false;
52 }
53 }
54 }
55
56 @ ++$this->stats['get'];
57
58 return $values;
59}