Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. AbstractCloner.php

class AbstractCloner

AbstractCloner implements a generic caster mechanism for objects and resources.

@author Nicolas Grekas <p@tchwork.com>

Hierarchy

  • class \Symfony\Component\VarDumper\Cloner\AbstractCloner implements \Symfony\Component\VarDumper\Cloner\ClonerInterface

Expanded class hierarchy of AbstractCloner

File

vendor/symfony/var-dumper/Cloner/AbstractCloner.php, line 22

Namespace

Symfony\Component\VarDumper\Cloner
View source
abstract class AbstractCloner implements ClonerInterface {
    public static array $defaultCasters = [
        '__PHP_Incomplete_Class' => [
            'Symfony\\Component\\VarDumper\\Caster\\Caster',
            'castPhpIncompleteClass',
        ],
        'Symfony\\Component\\VarDumper\\Caster\\CutStub' => [
            'Symfony\\Component\\VarDumper\\Caster\\StubCaster',
            'castStub',
        ],
        'Symfony\\Component\\VarDumper\\Caster\\CutArrayStub' => [
            'Symfony\\Component\\VarDumper\\Caster\\StubCaster',
            'castCutArray',
        ],
        'Symfony\\Component\\VarDumper\\Caster\\ConstStub' => [
            'Symfony\\Component\\VarDumper\\Caster\\StubCaster',
            'castStub',
        ],
        'Symfony\\Component\\VarDumper\\Caster\\EnumStub' => [
            'Symfony\\Component\\VarDumper\\Caster\\StubCaster',
            'castEnum',
        ],
        'Symfony\\Component\\VarDumper\\Caster\\ScalarStub' => [
            'Symfony\\Component\\VarDumper\\Caster\\StubCaster',
            'castScalar',
        ],
        'Fiber' => [
            'Symfony\\Component\\VarDumper\\Caster\\FiberCaster',
            'castFiber',
        ],
        'Closure' => [
            'Symfony\\Component\\VarDumper\\Caster\\ReflectionCaster',
            'castClosure',
        ],
        'Generator' => [
            'Symfony\\Component\\VarDumper\\Caster\\ReflectionCaster',
            'castGenerator',
        ],
        'ReflectionType' => [
            'Symfony\\Component\\VarDumper\\Caster\\ReflectionCaster',
            'castType',
        ],
        'ReflectionAttribute' => [
            'Symfony\\Component\\VarDumper\\Caster\\ReflectionCaster',
            'castAttribute',
        ],
        'ReflectionGenerator' => [
            'Symfony\\Component\\VarDumper\\Caster\\ReflectionCaster',
            'castReflectionGenerator',
        ],
        'ReflectionClass' => [
            'Symfony\\Component\\VarDumper\\Caster\\ReflectionCaster',
            'castClass',
        ],
        'ReflectionClassConstant' => [
            'Symfony\\Component\\VarDumper\\Caster\\ReflectionCaster',
            'castClassConstant',
        ],
        'ReflectionFunctionAbstract' => [
            'Symfony\\Component\\VarDumper\\Caster\\ReflectionCaster',
            'castFunctionAbstract',
        ],
        'ReflectionMethod' => [
            'Symfony\\Component\\VarDumper\\Caster\\ReflectionCaster',
            'castMethod',
        ],
        'ReflectionParameter' => [
            'Symfony\\Component\\VarDumper\\Caster\\ReflectionCaster',
            'castParameter',
        ],
        'ReflectionProperty' => [
            'Symfony\\Component\\VarDumper\\Caster\\ReflectionCaster',
            'castProperty',
        ],
        'ReflectionReference' => [
            'Symfony\\Component\\VarDumper\\Caster\\ReflectionCaster',
            'castReference',
        ],
        'ReflectionExtension' => [
            'Symfony\\Component\\VarDumper\\Caster\\ReflectionCaster',
            'castExtension',
        ],
        'ReflectionZendExtension' => [
            'Symfony\\Component\\VarDumper\\Caster\\ReflectionCaster',
            'castZendExtension',
        ],
        'Doctrine\\Common\\Persistence\\ObjectManager' => [
            'Symfony\\Component\\VarDumper\\Caster\\StubCaster',
            'cutInternals',
        ],
        'Doctrine\\Common\\Proxy\\Proxy' => [
            'Symfony\\Component\\VarDumper\\Caster\\DoctrineCaster',
            'castCommonProxy',
        ],
        'Doctrine\\ORM\\Proxy\\Proxy' => [
            'Symfony\\Component\\VarDumper\\Caster\\DoctrineCaster',
            'castOrmProxy',
        ],
        'Doctrine\\ORM\\PersistentCollection' => [
            'Symfony\\Component\\VarDumper\\Caster\\DoctrineCaster',
            'castPersistentCollection',
        ],
        'Doctrine\\Persistence\\ObjectManager' => [
            'Symfony\\Component\\VarDumper\\Caster\\StubCaster',
            'cutInternals',
        ],
        'DOMException' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castException',
        ],
        'Dom\\Exception' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castException',
        ],
        'DOMStringList' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castLength',
        ],
        'DOMNameList' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castLength',
        ],
        'DOMImplementation' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castImplementation',
        ],
        'Dom\\Implementation' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castImplementation',
        ],
        'DOMImplementationList' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castLength',
        ],
        'DOMNode' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castNode',
        ],
        'Dom\\Node' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castNode',
        ],
        'DOMNameSpaceNode' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castNameSpaceNode',
        ],
        'DOMDocument' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castDocument',
        ],
        'Dom\\XMLDocument' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castXMLDocument',
        ],
        'Dom\\HTMLDocument' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castHTMLDocument',
        ],
        'DOMNodeList' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castLength',
        ],
        'Dom\\NodeList' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castLength',
        ],
        'DOMNamedNodeMap' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castLength',
        ],
        'Dom\\DTDNamedNodeMap' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castLength',
        ],
        'DOMCharacterData' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castCharacterData',
        ],
        'Dom\\CharacterData' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castCharacterData',
        ],
        'DOMAttr' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castAttr',
        ],
        'Dom\\Attr' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castAttr',
        ],
        'DOMElement' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castElement',
        ],
        'Dom\\Element' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castElement',
        ],
        'DOMText' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castText',
        ],
        'Dom\\Text' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castText',
        ],
        'DOMDocumentType' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castDocumentType',
        ],
        'Dom\\DocumentType' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castDocumentType',
        ],
        'DOMNotation' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castNotation',
        ],
        'Dom\\Notation' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castNotation',
        ],
        'DOMEntity' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castEntity',
        ],
        'Dom\\Entity' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castEntity',
        ],
        'DOMProcessingInstruction' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castProcessingInstruction',
        ],
        'Dom\\ProcessingInstruction' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castProcessingInstruction',
        ],
        'DOMXPath' => [
            'Symfony\\Component\\VarDumper\\Caster\\DOMCaster',
            'castXPath',
        ],
        'XMLReader' => [
            'Symfony\\Component\\VarDumper\\Caster\\XmlReaderCaster',
            'castXmlReader',
        ],
        'ErrorException' => [
            'Symfony\\Component\\VarDumper\\Caster\\ExceptionCaster',
            'castErrorException',
        ],
        'Exception' => [
            'Symfony\\Component\\VarDumper\\Caster\\ExceptionCaster',
            'castException',
        ],
        'Error' => [
            'Symfony\\Component\\VarDumper\\Caster\\ExceptionCaster',
            'castError',
        ],
        'Symfony\\Bridge\\Monolog\\Logger' => [
            'Symfony\\Component\\VarDumper\\Caster\\StubCaster',
            'cutInternals',
        ],
        'Symfony\\Component\\DependencyInjection\\ContainerInterface' => [
            'Symfony\\Component\\VarDumper\\Caster\\StubCaster',
            'cutInternals',
        ],
        'Symfony\\Component\\EventDispatcher\\EventDispatcherInterface' => [
            'Symfony\\Component\\VarDumper\\Caster\\StubCaster',
            'cutInternals',
        ],
        'Symfony\\Component\\HttpClient\\AmpHttpClient' => [
            'Symfony\\Component\\VarDumper\\Caster\\SymfonyCaster',
            'castHttpClient',
        ],
        'Symfony\\Component\\HttpClient\\CurlHttpClient' => [
            'Symfony\\Component\\VarDumper\\Caster\\SymfonyCaster',
            'castHttpClient',
        ],
        'Symfony\\Component\\HttpClient\\NativeHttpClient' => [
            'Symfony\\Component\\VarDumper\\Caster\\SymfonyCaster',
            'castHttpClient',
        ],
        'Symfony\\Component\\HttpClient\\Response\\AmpResponse' => [
            'Symfony\\Component\\VarDumper\\Caster\\SymfonyCaster',
            'castHttpClientResponse',
        ],
        'Symfony\\Component\\HttpClient\\Response\\AmpResponseV4' => [
            'Symfony\\Component\\VarDumper\\Caster\\SymfonyCaster',
            'castHttpClientResponse',
        ],
        'Symfony\\Component\\HttpClient\\Response\\AmpResponseV5' => [
            'Symfony\\Component\\VarDumper\\Caster\\SymfonyCaster',
            'castHttpClientResponse',
        ],
        'Symfony\\Component\\HttpClient\\Response\\CurlResponse' => [
            'Symfony\\Component\\VarDumper\\Caster\\SymfonyCaster',
            'castHttpClientResponse',
        ],
        'Symfony\\Component\\HttpClient\\Response\\NativeResponse' => [
            'Symfony\\Component\\VarDumper\\Caster\\SymfonyCaster',
            'castHttpClientResponse',
        ],
        'Symfony\\Component\\HttpFoundation\\Request' => [
            'Symfony\\Component\\VarDumper\\Caster\\SymfonyCaster',
            'castRequest',
        ],
        'Symfony\\Component\\Uid\\Ulid' => [
            'Symfony\\Component\\VarDumper\\Caster\\SymfonyCaster',
            'castUlid',
        ],
        'Symfony\\Component\\Uid\\Uuid' => [
            'Symfony\\Component\\VarDumper\\Caster\\SymfonyCaster',
            'castUuid',
        ],
        'Symfony\\Component\\VarExporter\\Internal\\LazyObjectState' => [
            'Symfony\\Component\\VarDumper\\Caster\\SymfonyCaster',
            'castLazyObjectState',
        ],
        'Symfony\\Component\\VarDumper\\Exception\\ThrowingCasterException' => [
            'Symfony\\Component\\VarDumper\\Caster\\ExceptionCaster',
            'castThrowingCasterException',
        ],
        'Symfony\\Component\\VarDumper\\Caster\\TraceStub' => [
            'Symfony\\Component\\VarDumper\\Caster\\ExceptionCaster',
            'castTraceStub',
        ],
        'Symfony\\Component\\VarDumper\\Caster\\FrameStub' => [
            'Symfony\\Component\\VarDumper\\Caster\\ExceptionCaster',
            'castFrameStub',
        ],
        'Symfony\\Component\\VarDumper\\Cloner\\AbstractCloner' => [
            'Symfony\\Component\\VarDumper\\Caster\\StubCaster',
            'cutInternals',
        ],
        'Symfony\\Component\\ErrorHandler\\Exception\\FlattenException' => [
            'Symfony\\Component\\VarDumper\\Caster\\ExceptionCaster',
            'castFlattenException',
        ],
        'Symfony\\Component\\ErrorHandler\\Exception\\SilencedErrorContext' => [
            'Symfony\\Component\\VarDumper\\Caster\\ExceptionCaster',
            'castSilencedErrorContext',
        ],
        'Imagine\\Image\\ImageInterface' => [
            'Symfony\\Component\\VarDumper\\Caster\\ImagineCaster',
            'castImage',
        ],
        'Ramsey\\Uuid\\UuidInterface' => [
            'Symfony\\Component\\VarDumper\\Caster\\UuidCaster',
            'castRamseyUuid',
        ],
        'ProxyManager\\Proxy\\ProxyInterface' => [
            'Symfony\\Component\\VarDumper\\Caster\\ProxyManagerCaster',
            'castProxy',
        ],
        'PHPUnit_Framework_MockObject_MockObject' => [
            'Symfony\\Component\\VarDumper\\Caster\\StubCaster',
            'cutInternals',
        ],
        'PHPUnit\\Framework\\MockObject\\MockObject' => [
            'Symfony\\Component\\VarDumper\\Caster\\StubCaster',
            'cutInternals',
        ],
        'PHPUnit\\Framework\\MockObject\\Stub' => [
            'Symfony\\Component\\VarDumper\\Caster\\StubCaster',
            'cutInternals',
        ],
        'Prophecy\\Prophecy\\ProphecySubjectInterface' => [
            'Symfony\\Component\\VarDumper\\Caster\\StubCaster',
            'cutInternals',
        ],
        'Mockery\\MockInterface' => [
            'Symfony\\Component\\VarDumper\\Caster\\StubCaster',
            'cutInternals',
        ],
        'PDO' => [
            'Symfony\\Component\\VarDumper\\Caster\\PdoCaster',
            'castPdo',
        ],
        'PDOStatement' => [
            'Symfony\\Component\\VarDumper\\Caster\\PdoCaster',
            'castPdoStatement',
        ],
        'AMQPConnection' => [
            'Symfony\\Component\\VarDumper\\Caster\\AmqpCaster',
            'castConnection',
        ],
        'AMQPChannel' => [
            'Symfony\\Component\\VarDumper\\Caster\\AmqpCaster',
            'castChannel',
        ],
        'AMQPQueue' => [
            'Symfony\\Component\\VarDumper\\Caster\\AmqpCaster',
            'castQueue',
        ],
        'AMQPExchange' => [
            'Symfony\\Component\\VarDumper\\Caster\\AmqpCaster',
            'castExchange',
        ],
        'AMQPEnvelope' => [
            'Symfony\\Component\\VarDumper\\Caster\\AmqpCaster',
            'castEnvelope',
        ],
        'ArrayObject' => [
            'Symfony\\Component\\VarDumper\\Caster\\SplCaster',
            'castArrayObject',
        ],
        'ArrayIterator' => [
            'Symfony\\Component\\VarDumper\\Caster\\SplCaster',
            'castArrayIterator',
        ],
        'SplDoublyLinkedList' => [
            'Symfony\\Component\\VarDumper\\Caster\\SplCaster',
            'castDoublyLinkedList',
        ],
        'SplFileInfo' => [
            'Symfony\\Component\\VarDumper\\Caster\\SplCaster',
            'castFileInfo',
        ],
        'SplFileObject' => [
            'Symfony\\Component\\VarDumper\\Caster\\SplCaster',
            'castFileObject',
        ],
        'SplHeap' => [
            'Symfony\\Component\\VarDumper\\Caster\\SplCaster',
            'castHeap',
        ],
        'SplObjectStorage' => [
            'Symfony\\Component\\VarDumper\\Caster\\SplCaster',
            'castObjectStorage',
        ],
        'SplPriorityQueue' => [
            'Symfony\\Component\\VarDumper\\Caster\\SplCaster',
            'castHeap',
        ],
        'OuterIterator' => [
            'Symfony\\Component\\VarDumper\\Caster\\SplCaster',
            'castOuterIterator',
        ],
        'WeakMap' => [
            'Symfony\\Component\\VarDumper\\Caster\\SplCaster',
            'castWeakMap',
        ],
        'WeakReference' => [
            'Symfony\\Component\\VarDumper\\Caster\\SplCaster',
            'castWeakReference',
        ],
        'Redis' => [
            'Symfony\\Component\\VarDumper\\Caster\\RedisCaster',
            'castRedis',
        ],
        'Relay\\Relay' => [
            'Symfony\\Component\\VarDumper\\Caster\\RedisCaster',
            'castRedis',
        ],
        'RedisArray' => [
            'Symfony\\Component\\VarDumper\\Caster\\RedisCaster',
            'castRedisArray',
        ],
        'RedisCluster' => [
            'Symfony\\Component\\VarDumper\\Caster\\RedisCaster',
            'castRedisCluster',
        ],
        'DateTimeInterface' => [
            'Symfony\\Component\\VarDumper\\Caster\\DateCaster',
            'castDateTime',
        ],
        'DateInterval' => [
            'Symfony\\Component\\VarDumper\\Caster\\DateCaster',
            'castInterval',
        ],
        'DateTimeZone' => [
            'Symfony\\Component\\VarDumper\\Caster\\DateCaster',
            'castTimeZone',
        ],
        'DatePeriod' => [
            'Symfony\\Component\\VarDumper\\Caster\\DateCaster',
            'castPeriod',
        ],
        'GMP' => [
            'Symfony\\Component\\VarDumper\\Caster\\GmpCaster',
            'castGmp',
        ],
        'MessageFormatter' => [
            'Symfony\\Component\\VarDumper\\Caster\\IntlCaster',
            'castMessageFormatter',
        ],
        'NumberFormatter' => [
            'Symfony\\Component\\VarDumper\\Caster\\IntlCaster',
            'castNumberFormatter',
        ],
        'IntlTimeZone' => [
            'Symfony\\Component\\VarDumper\\Caster\\IntlCaster',
            'castIntlTimeZone',
        ],
        'IntlCalendar' => [
            'Symfony\\Component\\VarDumper\\Caster\\IntlCaster',
            'castIntlCalendar',
        ],
        'IntlDateFormatter' => [
            'Symfony\\Component\\VarDumper\\Caster\\IntlCaster',
            'castIntlDateFormatter',
        ],
        'Memcached' => [
            'Symfony\\Component\\VarDumper\\Caster\\MemcachedCaster',
            'castMemcached',
        ],
        'Ds\\Collection' => [
            'Symfony\\Component\\VarDumper\\Caster\\DsCaster',
            'castCollection',
        ],
        'Ds\\Map' => [
            'Symfony\\Component\\VarDumper\\Caster\\DsCaster',
            'castMap',
        ],
        'Ds\\Pair' => [
            'Symfony\\Component\\VarDumper\\Caster\\DsCaster',
            'castPair',
        ],
        'Symfony\\Component\\VarDumper\\Caster\\DsPairStub' => [
            'Symfony\\Component\\VarDumper\\Caster\\DsCaster',
            'castPairStub',
        ],
        'mysqli_driver' => [
            'Symfony\\Component\\VarDumper\\Caster\\MysqliCaster',
            'castMysqliDriver',
        ],
        'CurlHandle' => [
            'Symfony\\Component\\VarDumper\\Caster\\ResourceCaster',
            'castCurl',
        ],
        ':dba' => [
            'Symfony\\Component\\VarDumper\\Caster\\ResourceCaster',
            'castDba',
        ],
        ':dba persistent' => [
            'Symfony\\Component\\VarDumper\\Caster\\ResourceCaster',
            'castDba',
        ],
        'GdImage' => [
            'Symfony\\Component\\VarDumper\\Caster\\ResourceCaster',
            'castGd',
        ],
        ':gd' => [
            'Symfony\\Component\\VarDumper\\Caster\\ResourceCaster',
            'castGd',
        ],
        ':pgsql large object' => [
            'Symfony\\Component\\VarDumper\\Caster\\PgSqlCaster',
            'castLargeObject',
        ],
        ':pgsql link' => [
            'Symfony\\Component\\VarDumper\\Caster\\PgSqlCaster',
            'castLink',
        ],
        ':pgsql link persistent' => [
            'Symfony\\Component\\VarDumper\\Caster\\PgSqlCaster',
            'castLink',
        ],
        ':pgsql result' => [
            'Symfony\\Component\\VarDumper\\Caster\\PgSqlCaster',
            'castResult',
        ],
        ':process' => [
            'Symfony\\Component\\VarDumper\\Caster\\ResourceCaster',
            'castProcess',
        ],
        ':stream' => [
            'Symfony\\Component\\VarDumper\\Caster\\ResourceCaster',
            'castStream',
        ],
        'OpenSSLCertificate' => [
            'Symfony\\Component\\VarDumper\\Caster\\ResourceCaster',
            'castOpensslX509',
        ],
        ':OpenSSL X.509' => [
            'Symfony\\Component\\VarDumper\\Caster\\ResourceCaster',
            'castOpensslX509',
        ],
        ':persistent stream' => [
            'Symfony\\Component\\VarDumper\\Caster\\ResourceCaster',
            'castStream',
        ],
        ':stream-context' => [
            'Symfony\\Component\\VarDumper\\Caster\\ResourceCaster',
            'castStreamContext',
        ],
        'XmlParser' => [
            'Symfony\\Component\\VarDumper\\Caster\\XmlResourceCaster',
            'castXml',
        ],
        ':xml' => [
            'Symfony\\Component\\VarDumper\\Caster\\XmlResourceCaster',
            'castXml',
        ],
        'RdKafka' => [
            'Symfony\\Component\\VarDumper\\Caster\\RdKafkaCaster',
            'castRdKafka',
        ],
        'RdKafka\\Conf' => [
            'Symfony\\Component\\VarDumper\\Caster\\RdKafkaCaster',
            'castConf',
        ],
        'RdKafka\\KafkaConsumer' => [
            'Symfony\\Component\\VarDumper\\Caster\\RdKafkaCaster',
            'castKafkaConsumer',
        ],
        'RdKafka\\Metadata\\Broker' => [
            'Symfony\\Component\\VarDumper\\Caster\\RdKafkaCaster',
            'castBrokerMetadata',
        ],
        'RdKafka\\Metadata\\Collection' => [
            'Symfony\\Component\\VarDumper\\Caster\\RdKafkaCaster',
            'castCollectionMetadata',
        ],
        'RdKafka\\Metadata\\Partition' => [
            'Symfony\\Component\\VarDumper\\Caster\\RdKafkaCaster',
            'castPartitionMetadata',
        ],
        'RdKafka\\Metadata\\Topic' => [
            'Symfony\\Component\\VarDumper\\Caster\\RdKafkaCaster',
            'castTopicMetadata',
        ],
        'RdKafka\\Message' => [
            'Symfony\\Component\\VarDumper\\Caster\\RdKafkaCaster',
            'castMessage',
        ],
        'RdKafka\\Topic' => [
            'Symfony\\Component\\VarDumper\\Caster\\RdKafkaCaster',
            'castTopic',
        ],
        'RdKafka\\TopicPartition' => [
            'Symfony\\Component\\VarDumper\\Caster\\RdKafkaCaster',
            'castTopicPartition',
        ],
        'RdKafka\\TopicConf' => [
            'Symfony\\Component\\VarDumper\\Caster\\RdKafkaCaster',
            'castTopicConf',
        ],
        'FFI\\CData' => [
            'Symfony\\Component\\VarDumper\\Caster\\FFICaster',
            'castCTypeOrCData',
        ],
        'FFI\\CType' => [
            'Symfony\\Component\\VarDumper\\Caster\\FFICaster',
            'castCTypeOrCData',
        ],
    ];
    protected int $maxItems = 2500;
    protected int $maxString = -1;
    protected int $minDepth = 1;
    
    /**
     * @var array<string, list<callable>>
     */
    private array $casters = [];
    
    /**
     * @var callable|null
     */
    private $prevErrorHandler;
    private array $classInfo = [];
    private int $filter = 0;
    
    /**
     * @param callable[]|null $casters A map of casters
     *
     * @see addCasters
     */
    public function __construct(?array $casters = null) {
        $this->addCasters($casters ?? static::$defaultCasters);
    }
    
    /**
     * Adds casters for resources and objects.
     *
     * Maps resources or objects types to a callback.
     * Types are in the key, with a callable caster for value.
     * Resource types are to be prefixed with a `:`,
     * see e.g. static::$defaultCasters.
     *
     * @param callable[] $casters A map of casters
     */
    public function addCasters(array $casters) : void {
        foreach ($casters as $type => $callback) {
            $this->casters[$type][] = $callback;
        }
    }
    
    /**
     * Sets the maximum number of items to clone past the minimum depth in nested structures.
     */
    public function setMaxItems(int $maxItems) : void {
        $this->maxItems = $maxItems;
    }
    
    /**
     * Sets the maximum cloned length for strings.
     */
    public function setMaxString(int $maxString) : void {
        $this->maxString = $maxString;
    }
    
    /**
     * Sets the minimum tree depth where we are guaranteed to clone all the items.  After this
     * depth is reached, only setMaxItems items will be cloned.
     */
    public function setMinDepth(int $minDepth) : void {
        $this->minDepth = $minDepth;
    }
    
    /**
     * Clones a PHP variable.
     *
     * @param int $filter A bit field of Caster::EXCLUDE_* constants
     */
    public function cloneVar(mixed $var, int $filter = 0) : Data {
        $this->prevErrorHandler = set_error_handler(function ($type, $msg, $file, $line, $context = []) {
            if (\E_RECOVERABLE_ERROR === $type || \E_USER_ERROR === $type) {
                // Cloner never dies
                throw new \ErrorException($msg, 0, $type, $file, $line);
            }
            if ($this->prevErrorHandler) {
                return ($this->prevErrorHandler)($type, $msg, $file, $line, $context);
            }
            return false;
        });
        $this->filter = $filter;
        if ($gc = gc_enabled()) {
            gc_disable();
        }
        try {
            return new Data($this->doClone($var));
        } finally {
            if ($gc) {
                gc_enable();
            }
            restore_error_handler();
            $this->prevErrorHandler = null;
        }
    }
    
    /**
     * Effectively clones the PHP variable.
     */
    protected abstract function doClone(mixed $var) : array;
    
    /**
     * Casts an object to an array representation.
     *
     * @param bool $isNested True if the object is nested in the dumped structure
     */
    protected function castObject(Stub $stub, bool $isNested) : array {
        $obj = $stub->value;
        $class = $stub->class;
        if (str_contains($class, "@anonymous\x00")) {
            $stub->class = get_debug_type($obj);
        }
        if (isset($this->classInfo[$class])) {
            [
                $i,
                $parents,
                $hasDebugInfo,
                $fileInfo,
            ] = $this->classInfo[$class];
        }
        else {
            $i = 2;
            $parents = [
                $class,
            ];
            $hasDebugInfo = method_exists($class, '__debugInfo');
            foreach (class_parents($class) as $p) {
                $parents[] = $p;
                ++$i;
            }
            foreach (class_implements($class) as $p) {
                $parents[] = $p;
                ++$i;
            }
            $parents[] = '*';
            $r = new \ReflectionClass($class);
            $fileInfo = $r->isInternal() || $r->isSubclassOf(Stub::class) ? [] : [
                'file' => $r->getFileName(),
                'line' => $r->getStartLine(),
            ];
            $this->classInfo[$class] = [
                $i,
                $parents,
                $hasDebugInfo,
                $fileInfo,
            ];
        }
        $stub->attr += $fileInfo;
        $a = Caster::castObject($obj, $class, $hasDebugInfo, $stub->class);
        try {
            while ($i--) {
                if (!empty($this->casters[$p = $parents[$i]])) {
                    foreach ($this->casters[$p] as $callback) {
                        $a = $callback($obj, $a, $stub, $isNested, $this->filter);
                    }
                }
            }
        } catch (\Exception $e) {
            $a = [
                (Stub::TYPE_OBJECT === $stub->type ? Caster::PREFIX_VIRTUAL : '') . '⚠' => new ThrowingCasterException($e),
            ] + $a;
        }
        return $a;
    }
    
    /**
     * Casts a resource to an array representation.
     *
     * @param bool $isNested True if the object is nested in the dumped structure
     */
    protected function castResource(Stub $stub, bool $isNested) : array {
        $a = [];
        $res = $stub->value;
        $type = $stub->class;
        try {
            if (!empty($this->casters[':' . $type])) {
                foreach ($this->casters[':' . $type] as $callback) {
                    $a = $callback($res, $a, $stub, $isNested, $this->filter);
                }
            }
        } catch (\Exception $e) {
            $a = [
                (Stub::TYPE_OBJECT === $stub->type ? Caster::PREFIX_VIRTUAL : '') . '⚠' => new ThrowingCasterException($e),
            ] + $a;
        }
        return $a;
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
AbstractCloner::$casters private property
AbstractCloner::$classInfo private property
AbstractCloner::$defaultCasters public static property
AbstractCloner::$filter private property
AbstractCloner::$maxItems protected property
AbstractCloner::$maxString protected property
AbstractCloner::$minDepth protected property
AbstractCloner::$prevErrorHandler private property
AbstractCloner::addCasters public function Adds casters for resources and objects.
AbstractCloner::castObject protected function Casts an object to an array representation.
AbstractCloner::castResource protected function Casts a resource to an array representation.
AbstractCloner::cloneVar public function Clones a PHP variable. Overrides ClonerInterface::cloneVar
AbstractCloner::doClone abstract protected function Effectively clones the PHP variable. 1
AbstractCloner::setMaxItems public function Sets the maximum number of items to clone past the minimum depth in nested structures.
AbstractCloner::setMaxString public function Sets the maximum cloned length for strings.
AbstractCloner::setMinDepth public function Sets the minimum tree depth where we are guaranteed to clone all the items. After this
depth is reached, only setMaxItems items will be cloned.
AbstractCloner::__construct public function
RSS feed
Powered by Drupal