1<?php
2
3/*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Symfony\Component\VarDumper\Cloner;
13
14/**
15 * Represents the main properties of a PHP variable.
16 *
17 * @author Nicolas Grekas <p@tchwork.com>
18 */
19class Stub
20{
21    const TYPE_REF = 1;
22    const TYPE_STRING = 2;
23    const TYPE_ARRAY = 3;
24    const TYPE_OBJECT = 4;
25    const TYPE_RESOURCE = 5;
26
27    const STRING_BINARY = 1;
28    const STRING_UTF8 = 2;
29
30    const ARRAY_ASSOC = 1;
31    const ARRAY_INDEXED = 2;
32
33    public $type = self::TYPE_REF;
34    public $class = '';
35    public $value;
36    public $cut = 0;
37    public $handle = 0;
38    public $refCount = 0;
39    public $position = 0;
40    public $attr = [];
41
42    private static $defaultProperties = [];
43
44    /**
45     * @internal
46     */
47    public function __sleep()
48    {
49        $properties = [];
50
51        if (!isset(self::$defaultProperties[$c = static::class])) {
52            self::$defaultProperties[$c] = get_class_vars($c);
53
54            foreach ((new \ReflectionClass($c))->getStaticProperties() as $k => $v) {
55                unset(self::$defaultProperties[$c][$k]);
56            }
57        }
58
59        foreach (self::$defaultProperties[$c] as $k => $v) {
60            if ($this->$k !== $v) {
61                $properties[] = $k;
62            }
63        }
64
65        return $properties;
66    }
67}
68