/var/www/hkosl.com/nick/codeigniter/application/vendor/symfony/var-dumper/Caster/Caster.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\VarDumper\Caster;

use 
Symfony\Component\VarDumper\Cloner\Stub;

/**
 * Helper for filtering out properties in casters.
 *
 * @author Nicolas Grekas <p@tchwork.com>
 *
 * @final
 */
class Caster
{
    const 
EXCLUDE_VERBOSE 1;
    const 
EXCLUDE_VIRTUAL 2;
    const 
EXCLUDE_DYNAMIC 4;
    const 
EXCLUDE_PUBLIC 8;
    const 
EXCLUDE_PROTECTED 16;
    const 
EXCLUDE_PRIVATE 32;
    const 
EXCLUDE_NULL 64;
    const 
EXCLUDE_EMPTY 128;
    const 
EXCLUDE_NOT_IMPORTANT 256;
    const 
EXCLUDE_STRICT 512;

    const 
PREFIX_VIRTUAL "\0~\0";
    const 
PREFIX_DYNAMIC "\0+\0";
    const 
PREFIX_PROTECTED "\0*\0";

    
/**
     * Casts objects to arrays and adds the dynamic property prefix.
     *
     * @param object $obj          The object to cast
     * @param string $class        The class of the object
     * @param bool   $hasDebugInfo Whether the __debugInfo method exists on $obj or not
     *
     * @return array The array-cast of the object, with prefixed dynamic properties
     */
    
public static function castObject($obj$class$hasDebugInfo false)
    {
        if (
$class instanceof \ReflectionClass) {
            @
trigger_error(sprintf('Passing a ReflectionClass to "%s()" is deprecated since Symfony 3.3 and will be unsupported in 4.0. Pass the class name as string instead.'__METHOD__), E_USER_DEPRECATED);
            
$hasDebugInfo $class->hasMethod('__debugInfo');
            
$class $class->name;
        }

        
$a $obj instanceof \Closure ? [] : (array) $obj;

        if (
$obj instanceof \__PHP_Incomplete_Class) {
            return 
$a;
        }

        if (
$a) {
            static 
$publicProperties = [];

            
$i 0;
            
$prefixedKeys = [];
            foreach (
$a as $k => $v) {
                if (isset(
$k[0]) ? "\0" !== $k[0] : \PHP_VERSION_ID >= 70200) {
                    if (!isset(
$publicProperties[$class])) {
                        foreach (
get_class_vars($class) as $prop => $v) {
                            
$publicProperties[$class][$prop] = true;
                        }
                    }
                    if (!isset(
$publicProperties[$class][$k])) {
                        
$prefixedKeys[$i] = self::PREFIX_DYNAMIC.$k;
                    }
                } elseif (isset(
$k[16]) && "\0" === $k[16] && === strpos($k"\0class@anonymous\0")) {
                    
$prefixedKeys[$i] = "\0".get_parent_class($class).'@anonymous'.strrchr($k"\0");
                }
                ++
$i;
            }
            if (
$prefixedKeys) {
                
$keys array_keys($a);
                foreach (
$prefixedKeys as $i => $k) {
                    
$keys[$i] = $k;
                }
                
$a array_combine($keys$a);
            }
        }

        if (
$hasDebugInfo && \is_array($debugInfo $obj->__debugInfo())) {
            foreach (
$debugInfo as $k => $v) {
                if (!isset(
$k[0]) || "\0" !== $k[0]) {
                    
$k self::PREFIX_VIRTUAL.$k;
                }

                unset(
$a[$k]);
                
$a[$k] = $v;
            }
        }

        return 
$a;
    }

    
/**
     * Filters out the specified properties.
     *
     * By default, a single match in the $filter bit field filters properties out, following an "or" logic.
     * When EXCLUDE_STRICT is set, an "and" logic is applied: all bits must match for a property to be removed.
     *
     * @param array    $a                The array containing the properties to filter
     * @param int      $filter           A bit field of Caster::EXCLUDE_* constants specifying which properties to filter out
     * @param string[] $listedProperties List of properties to exclude when Caster::EXCLUDE_VERBOSE is set, and to preserve when Caster::EXCLUDE_NOT_IMPORTANT is set
     * @param int      &$count           Set to the number of removed properties
     *
     * @return array The filtered array
     */
    
public static function filter(array $a$filter, array $listedProperties = [], &$count 0)
    {
        
$count 0;

        foreach (
$a as $k => $v) {
            
$type self::EXCLUDE_STRICT $filter;

            if (
null === $v) {
                
$type |= self::EXCLUDE_NULL $filter;
                
$type |= self::EXCLUDE_EMPTY $filter;
            } elseif (
false === $v || '' === $v || '0' === $v || === $v || 0.0 === $v || [] === $v) {
                
$type |= self::EXCLUDE_EMPTY $filter;
            }
            if ((
self::EXCLUDE_NOT_IMPORTANT $filter) && !\in_array($k$listedPropertiestrue)) {
                
$type |= self::EXCLUDE_NOT_IMPORTANT;
            }
            if ((
self::EXCLUDE_VERBOSE $filter) && \in_array($k$listedPropertiestrue)) {
                
$type |= self::EXCLUDE_VERBOSE;
            }

            if (!isset(
$k[1]) || "\0" !== $k[0]) {
                
$type |= self::EXCLUDE_PUBLIC $filter;
            } elseif (
'~' === $k[1]) {
                
$type |= self::EXCLUDE_VIRTUAL $filter;
            } elseif (
'+' === $k[1]) {
                
$type |= self::EXCLUDE_DYNAMIC $filter;
            } elseif (
'*' === $k[1]) {
                
$type |= self::EXCLUDE_PROTECTED $filter;
            } else {
                
$type |= self::EXCLUDE_PRIVATE $filter;
            }

            if ((
self::EXCLUDE_STRICT $filter) ? $type === $filter $type) {
                unset(
$a[$k]);
                ++
$count;
            }
        }

        return 
$a;
    }

    public static function 
castPhpIncompleteClass(\__PHP_Incomplete_Class $c, array $aStub $stub$isNested)
    {
        if (isset(
$a['__PHP_Incomplete_Class_Name'])) {
            
$stub->class .= '('.$a['__PHP_Incomplete_Class_Name'].')';
            unset(
$a['__PHP_Incomplete_Class_Name']);
        }

        return 
$a;
    }
}