Вход Регистрация
Файл: symfony-2.7/src/Symfony/Component/VarDumper/Caster/SplCaster.php
Строк: 52
<?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 SymfonyComponentVarDumperCaster;

use 
SymfonyComponentVarDumperClonerStub;

/**
 * Casts SPL related classes to array representation.
 *
 * @author Nicolas Grekas <p@tchwork.com>
 */
class SplCaster
{
    public static function 
castArrayObject(ArrayObject $c, array $aStub $stub$isNested)
    {
        
$class $stub->class;
        
$flags $c->getFlags();

        
$b = array(
            
"~flag::STD_PROP_LIST" => (bool) ($flags ArrayObject::STD_PROP_LIST),
            
"~flag::ARRAY_AS_PROPS" => (bool) ($flags ArrayObject::ARRAY_AS_PROPS),
            
"~iteratorClass" => $c->getIteratorClass(),
            
"~storage" => $c->getArrayCopy(),
        );

        if (
$class === 'ArrayObject') {
            
$a $b;
        } else {
            if (!(
$flags ArrayObject::STD_PROP_LIST)) {
                
$c->setFlags(ArrayObject::STD_PROP_LIST);

                if (
$a = (array) $c) {
                    
$class = new ReflectionClass($class);
                    foreach (
$a as $k => $p) {
                        if (!isset(
$k[0]) || ("" !== $k[0] && !$class->hasProperty($k))) {
                            unset(
$a[$k]);
                            
$a["+".$k] = $p;
                        }
                    }
                }

                
$c->setFlags($flags);
            }

            
$a += $b;
        }

        return 
$a;
    }

    public static function 
castHeap(Iterator $c, array $aStub $stub$isNested)
    {
        
$a += array(
            
"~heap" => iterator_to_array(clone $c),
        );

        return 
$a;
    }

    public static function 
castDoublyLinkedList(SplDoublyLinkedList $c, array $aStub $stub$isNested)
    {
        
$mode $c->getIteratorMode();
        
$c->setIteratorMode(SplDoublyLinkedList::IT_MODE_KEEP $mode & ~SplDoublyLinkedList::IT_MODE_DELETE);

        
$a += array(
            
"~mode" => new ConstStub((($mode SplDoublyLinkedList::IT_MODE_LIFO) ? 'IT_MODE_LIFO' 'IT_MODE_FIFO').' | '.(($mode SplDoublyLinkedList::IT_MODE_KEEP) ? 'IT_MODE_KEEP' 'IT_MODE_DELETE'), $mode),
            
"~dllist" => iterator_to_array($c),
        );
        
$c->setIteratorMode($mode);

        return 
$a;
    }

    public static function 
castFixedArray(SplFixedArray $c, array $aStub $stub$isNested)
    {
        
$a += array(
            
"~storage" => $c->toArray(),
        );

        return 
$a;
    }

    public static function 
castObjectStorage(SplObjectStorage $c, array $aStub $stub$isNested)
    {
        
$storage = array();
        unset(
$a["+gcdata"]); // Don't hit https://bugs.php.net/65967

        
foreach ($c as $obj) {
            
$storage[spl_object_hash($obj)] = array(
                
'object' => $obj,
                
'info' => $c->getInfo(),
             );
        }

        
$a += array(
            
"~storage" => $storage,
        );

        return 
$a;
    }
}
Онлайн: 1
Реклама