Dumper.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Symfony\Component\Console\Helper;
  11. use Symfony\Component\Console\Output\OutputInterface;
  12. use Symfony\Component\VarDumper\Cloner\ClonerInterface;
  13. use Symfony\Component\VarDumper\Cloner\VarCloner;
  14. use Symfony\Component\VarDumper\Dumper\CliDumper;
  15. /**
  16. * @author Roland Franssen <franssen.roland@gmail.com>
  17. */
  18. final class Dumper
  19. {
  20. /**
  21. * @var \Symfony\Component\Console\Output\OutputInterface
  22. */
  23. private $output;
  24. /**
  25. * @var \Symfony\Component\VarDumper\Dumper\CliDumper|null
  26. */
  27. private $dumper;
  28. /**
  29. * @var \Symfony\Component\VarDumper\Cloner\ClonerInterface|null
  30. */
  31. private $cloner;
  32. /**
  33. * @var \Closure
  34. */
  35. private $handler;
  36. /**
  37. * @param \Symfony\Component\Console\Output\OutputInterface $output
  38. * @param \Symfony\Component\VarDumper\Dumper\CliDumper|null $dumper
  39. * @param \Symfony\Component\VarDumper\Cloner\ClonerInterface|null $cloner
  40. */
  41. public function __construct($output, $dumper = null, $cloner = null)
  42. {
  43. $this->output = $output;
  44. $this->dumper = $dumper;
  45. $this->cloner = $cloner;
  46. if (class_exists(CliDumper::class)) {
  47. $this->handler = function ($var): string {
  48. $dumper = $this->dumper = $this->dumper ?? new CliDumper(null, null, CliDumper::DUMP_LIGHT_ARRAY | CliDumper::DUMP_COMMA_SEPARATOR);
  49. $dumper->setColors($this->output->isDecorated());
  50. return rtrim($dumper->dump(($this->cloner = $this->cloner ?? new VarCloner())->cloneVar($var)->withRefHandles(false), true));
  51. };
  52. } else {
  53. $this->handler = function ($var) : string {
  54. switch (true) {
  55. case null === $var:
  56. return 'null';
  57. case true === $var:
  58. return 'true';
  59. case false === $var:
  60. return 'false';
  61. case \is_string($var):
  62. return '"'.$var.'"';
  63. default:
  64. return rtrim(print_r($var, true));
  65. }
  66. };
  67. }
  68. }
  69. /**
  70. * @param mixed $var
  71. */
  72. public function __invoke($var)
  73. {
  74. return ($this->handler)($var);
  75. }
  76. }