blob: b5a96a02cfcdc919745ac9f34e22c97838f9c12c [file] [log] [blame]
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +02001<?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\Caster;
13
14use Symfony\Component\VarDumper\Cloner\Stub;
15
16/**
17 * Represents the main properties of a PHP variable, pre-casted by a caster.
18 *
19 * @author Nicolas Grekas <p@tchwork.com>
20 */
21class CutStub extends Stub
22{
Matthias Andreas Benkard1ba53812022-12-27 17:32:58 +010023 public function __construct(mixed $value)
Matthias Andreas Benkard7b2a3a12021-08-16 10:57:25 +020024 {
25 $this->value = $value;
26
27 switch (\gettype($value)) {
28 case 'object':
29 $this->type = self::TYPE_OBJECT;
30 $this->class = \get_class($value);
31
32 if ($value instanceof \Closure) {
33 ReflectionCaster::castClosure($value, [], $this, true, Caster::EXCLUDE_VERBOSE);
34 }
35
36 $this->cut = -1;
37 break;
38
39 case 'array':
40 $this->type = self::TYPE_ARRAY;
41 $this->class = self::ARRAY_ASSOC;
42 $this->cut = $this->value = \count($value);
43 break;
44
45 case 'resource':
46 case 'unknown type':
47 case 'resource (closed)':
48 $this->type = self::TYPE_RESOURCE;
49 $this->handle = (int) $value;
50 if ('Unknown' === $this->class = @get_resource_type($value)) {
51 $this->class = 'Closed';
52 }
53 $this->cut = -1;
54 break;
55
56 case 'string':
57 $this->type = self::TYPE_STRING;
58 $this->class = preg_match('//u', $value) ? self::STRING_UTF8 : self::STRING_BINARY;
59 $this->cut = self::STRING_BINARY === $this->class ? \strlen($value) : mb_strlen($value, 'UTF-8');
60 $this->value = '';
61 break;
62 }
63 }
64}