Dumper
Dumper is a simple and ready to use PHP var dumper., (*1)
Essentially, its a print_r() and var_dump() replacement., (*2)
Usage
Install the latest version using composer require gerardpastor/dumper, (*3)
Enabling all dumping functions is as easy as calling enable() method on the
main Dumper class:, (*4)
use Deg\Dumper\Dumper;
Dumper::enable(Dumper::BROWSER);
The first parameter determines what output to use. This can be a predefined
string or an instance of OutputInterface., (*5)
By default, Dumper includes 3 outputs: dummy, browser and console., (*6)
-
browser: Dumps variables to browser (uses HTML formatter)
-
console: Dumps variables to console (uses Console formatter)
-
dummy: Dumps nothing (used for production environment)
Dumping vars
Dumper defines 3 dumping functions:, (*7)
dumpVars: Dumps each var in $vars, (*8)
// dumpVars(array $vars, $deep = null)
$vars = array(
'text',
123,
array(),
);
dumpVars($vars);
dump: Dump $var, (*9)
// dump($var, $deep = null)
$var = 'foo';
dump($var);
dumpAll: Dump each argument, (*10)
// dumpAll($var, $_ = null)
$var1 = 'foo';
$var2 = 'var';
dumpAll($var1, $var2);
All of this functions starting with "e" dumps and ends up the execution., (*11)
edumpVars(array('text', 123, array()));
// Or
edump('foo', 1);
// Or
edumpAll('foo', 'var');
Dumping backtrace
You can dump current debug backtrace with dumpBacktrace():, (*12)
// dumpBacktrace($limit = null)
dumpBacktrace();
// Or
edumpBacktrace();
Raw var_dump
Aditionally, Dumper provides rawDump function that does a native var_dump
inside a <pre> tag., (*13)
rawDump('foo', 'var');
Configuration
You can configure some default parameters on Dumper., (*14)
Accessing Dumper Instance
To configure Dumper you must acces to its instance., (*15)
You can access dumper instance when call enable() or by calling
getInstance() when Dumper is already enabled., (*16)
use Deg\Dumper\Dumper;
$dumper = Dumper::enable(Dumper::BROWSER);
$dumper->dump('foo');
$dumper = Dumper::getInstance();
$dumper->dump('foo');
Setting default max dumping deep
You can set the default max dumping deep by passing to the VarParser:, (*17)
use Deg\Dumper\Dumper;
$dumper = Dumper::enable(Dumper::BROWSER);
$dumper->getVarParser()->setMaxDeep(3);
// Dumps at 3 levels
dump($arrayOrObject);
You can override this value in any call to dump or dumpVars as the second
argument:, (*18)
// Dumps at 2 levels
dump($arrayOrObject, 2);
Limiting the number of stack frames in backtrace dumping
By default, Dumper dumps all stack frames in backtrace. You can limit this
number globally by passing to the BacktraceFactory:, (*19)
use Deg\Dumper\Dumper;
$dumper = Dumper::enable(Dumper::BROWSER);
$dumper->getBacktraceFactory()->setMaxLimit(3);
// Dumps 3 stack frames
dumpBacktrace();
You can override this value in any call to dumpBacktrace as the first
argument:, (*20)
// Dumps 2 stack frames
dumpBacktrace(2);
Adding excludes to backtrace
Dumper exculdes all namespaces and directories from Dumper, but you can add your
own by passing to the BacktraceFactory:, (*21)
use Deg\Dumper\Dumper;
$dumper = Dumper::enable(Dumper::BROWSER);
$dumper->getBacktraceFactory()->addExcule('Foo/Var');
//Or
$dumper->getBacktraceFactory()->addExcule(__DIRECTORY__ . '/foo/var');
Disabling global functions
You can disable the definition of Dumper as global functions by passing
false as the second argument when calling enable()., (*22)
Then, you can still access dumper functions by calling directly on a dumper instance:, (*23)
use Deg\Dumper\Dumper;
$dumper = Dumper::enable(Dumper::BROWSER, false);
$dumper->dump('foo');
You can enable this global functions at any time by calling
defineGlobalFunctions():, (*24)
use Deg\Dumper\Dumper;
$dumper = Dumper::enable(Dumper::BROWSER, false);
Dumper::defineGlobalFunctions();
dump('foo');
Var Tokenizers
Dumper uses tokenizers to convert any variable into a string., (*25)
A tokenizer receives a variable and returns a TokenStream (that is a
collection of Token), (*26)
Dumper provides tokenizers to parse the most generic variable types:
- ObjectTokenizer: Parses an object
- ArrayTokenizer: Parses an array
- StringTokenizer: Parses an string
- GenericTokenizer: Parses any variable (in a very simple way), (*27)
Tokenizer has an accept($var) and a getConfidence() method., (*28)
The parser will use the tokenizer with higher confidence from those which
accepted the given variable., (*29)
Custom Tokenizers
You can add more specific or sophisticated parsing by adding custom tokenizers., (*30)
To do that, you must create a class that implements TokenizerInterface and
pass to the VarParser:, (*31)
namespace Foo\Var;
use Deg\Dumper\Parser\VarParser;
use Deg\Dumper\Parser\TokenStream;
use Deg\Dumper\Parser\TokenStreamBuilder;
class MyCustomTokenizer implements TokenizerInterface
{
public function tokenize($var, $deep, VarParser $parser)
{
$type = gettype($var);
$builder = new TokenStreamBuilder();
// Build the stream using a TokenStreamBuilder
$builder
->addKeyword($type)
->addBrace('(')
->addNumber($var)
->addBrace(')')
;
// Tokenizer must return a TokenStream
return $builder->getStream();
}
public function accept($var)
{
// It establishes if this tokenizer can tokenize the given variable
return is_number($var);
}
public function getConfidence()
{
// It defines how specific is this tokenizer (higher number means more specific)
return 20;
}
}
Afterwards, pass to VarParser:, (*32)
use Deg\Dumper\Dumper;
$dumper = Dumper::enable(Dumper::BROWSER);
$dumper->getVarParser()->addTokenizer(new Foo\Var\MyCustomTokenizer());
Take a look at provided tokenizers for more specific examples., (*33)
Outputs
Dumper can use diferent outputs to show variables to user., (*34)
The provided Outputs are:
- BrowserOutput: Prints parsed result to the browser (like var_dump)
- ConsoleOutput: Prints parsed result to the system console (php://stdout, php://output)
- NullOutput: Prints nothing. Can be used to prevent dumping any variable in a production environment., (*35)
Using custom Outputs
You can provide your own output by extending Output class:, (*36)
namespace Foo\Var;
class MyCustomOutput extends Output
{
public function __construct(FormatterInterface $formatter = null)
{
$formatter = $formatter ? : new HtmlFormatter();
parent::__construct($formatter);
}
protected function doWrite($message)
{
print $message;
}
}
And then use it:, (*37)
use Deg\Dumper\Dumper;
$output = new Foo\Var\MyCustomOutput;
$dumper = Dumper::enable($output);
// or
$dumper->setOutput($output);
Take a look at provided outputs for more specific examples., (*38)
An Output use a Formatter to format the response.
The provided Outputs are:
- HtmlFormatter: Formats result to HTML code.
- ConsoleFormatter: Formats result to console code.
- PlainFormatter: Only format chars like new lines or indentions., (*39)
You can provide your own formatter by implementing FormatterInterface
interface:, (*40)
namespace Foo\Var;
class MyCustomFormatter implements FormatterInterface
{
public function formatStream(TokenStream $stream)
{
$buffer = '';
while ($stream->hasNext()) {
$token = $stream->getNext();
$buffer .= $this->formatToken($token);
}
return $buffer;
}
public function formatToken(Token $token)
{
return $token->getDescription() ?: $token->getValue();
}
}
And then use it:, (*41)
use Deg\Dumper\Dumper;
$formatter = new Foo\Var\MyCustomFormatter;
$dumper = Dumper::enable(Dumper::BROWSER);
$dumper->getOutput()->setFormatter($formatter);
Take a look at provided formatters for more specific examples., (*42)
Using Dumper as Object
The enable() method simply loads a default configuration, but you can
instantiate Dumper manually, without using enable():, (*43)
use Deg\Dumper\Dumper;
use Deg\Dumper\Backtrace\Backtrace;
use Deg\Dumper\Parser\VarParser;
use Deg\Dumper\Parser\BacktraceParser;
use Deg\Dumper\Output\BrowserOutput;
$varParser = new VarParser();
$varParser->addTokenizer(new Tokenizer\GenericTokenizer());
$backtraceParser = new BacktraceParser();
$backtraceFactory = new Backtrace();
$output = new BrowserOutput();
$dumper = new Dumper($varParser, $backtraceParser, $backtraceFactory, $output);
$dumper->dump('foo');
If you want the global functions to use your own instance, call setInstance() on
Dumper:, (*44)
// ...
$dumper = new Dumper($varParser, $backtraceParser, $backtraceFactory, $output);
Dumper::setInstance($dumper);
Dumper::defineGlobalFunctions();
dump('foo');