PHP Classes

File: src/Processors/ArrayProcessor.php

Recommend this page to a friend!
  Classes of Rodolfo Berrios Arce   Var-Dump   src/Processors/ArrayProcessor.php   Download  
File: src/Processors/ArrayProcessor.php
Role: Class source
Content type: text/plain
Description: Class source
Class: Var-Dump
Show the value of a variable in colored way
Author: By
Last change:
Date: 19 days ago
Size: 3,556 bytes
 

Contents

Class file image Download
<?php

/*
 * This file is part of Chevere.
 *
 * (c) Rodolfo Berrios <[email protected]>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

declare(strict_types=1);

namespace
Chevere\VarDump\Processors;

use
Chevere\Parameter\Interfaces\TypeInterface;
use
Chevere\VarDump\Interfaces\ProcessorInterface;
use
Chevere\VarDump\Interfaces\ProcessorNestedInterface;
use
Chevere\VarDump\Interfaces\VarDumperInterface;
use
Chevere\VarDump\Processors\Traits\HandleDepthTrait;
use
Chevere\VarDump\Processors\Traits\ProcessorTrait;

final class
ArrayProcessor implements ProcessorInterface, ProcessorNestedInterface
{
    use
ProcessorTrait;
    use
HandleDepthTrait;

   
/**
     * @var array<mixed>
     */
   
private array $var;

    private
int $count = 0;

    public function
__construct(
        private
VarDumperInterface $varDumper
   
) {
       
$this->assertType();
       
/** @var array<mixed> $array */
       
$array = $this->varDumper->dumpable()->var();
       
$this->var = $array;
       
$this->depth = $this->varDumper->depth() + 1;
       
$this->count = count($this->var);
       
$this->info = 'size=' . $this->count;
    }

    public function
type(): string
   
{
        return
TypeInterface::ARRAY;
    }

    public function
write(): void
   
{
       
$this->varDumper->writer()->write(
           
$this->typeHighlighted()
            .
' '
           
. ($this->count === 0 ? '[] ' : '')
            .
$this->highlightParentheses($this->info)
        );
        if (
$this->isCircularRef($this->var)) {
           
$this->varDumper->writer()->write(
               
' '
               
. $this->highlightParentheses($this->circularReference())
            );

            return;
        }
        if (
$this->depth > self::MAX_DEPTH) {
           
$this->varDumper->writer()->write(
               
' '
               
. $this->highlightParentheses($this->maxDepthReached())
            );

            return;
        }
       
$this->processMembers();
    }

   
/**
     * @param array<mixed> $array
     */
   
private function isCircularRef(array $array): bool
   
{
        foreach (
$array as $var) {
            if (
$array === $var) {
                return
true;
            }
            if (
is_array($var)) {
                return
$this->isCircularRef($var);
            }
        }

        return
false;
    }

    private function
processMembers(): void
   
{
       
$aux = 0;
       
$operator = $this->highlightOperator('=>');
        foreach (
$this->var as $key => $value) {
           
$aux++;
            if (
$aux === 1) {
               
$this->varDumper->writer()->write(
                   
$this->varDumper->format()->detailsOpen(
                       
$this->varDumper->depth() === 0
                   
)
                );
                if (
$this->varDumper->format()->detailsClose() === '') {
                   
$this->varDumper->writer()->write("\n");
                }
            } else {
               
$this->varDumper->writer()->write("\n");
            }

           
$indentString = $this->varDumper->indentString();
           
$format = $this->varDumper->format()->filterEncodedChars((string) $key);
           
$this->varDumper->writer()->write(" {$indentString}{$format} {$operator} ");
           
$this->handleDepth($value);
        }
        if (
$aux > 0) {
           
$this->varDumper->writer()->write(
               
$this->varDumper->format()->detailsClose()
            );
        }
    }
}