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}