2017 © Pedro Peláez
 

library fdl-debug

A super simple, no dependency, extendable PHP debugger helper.

image

franz-deleon/fdl-debug

A super simple, no dependency, extendable PHP debugger helper.

  • Friday, April 29, 2016
  • by franz-deleon
  • Repository
  • 1 Watchers
  • 1 Stars
  • 20 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 2 Versions
  • 0 % Grown

The README.md

FdlDebug

Build Status, (*1)

FdlDebug is a super simple PHP debugger outputter with a twist. It's like var_dump() but more!, (*2)

Sneak peak on usage

\FdlDebug\Front::i()->pr("Hello Yo!"); // outputs: "Hello Yo!"
// procedural style
pr("Hello Yo"); // output: "Hello Yo!"

// Another example. Imagine you are in a large loop and...
for ($i = 0; $i <= 10000; $i++) {

    // you want to print when the iteration is at 5000
    cond_bool($i == 5000)->pr("Yes! its at {$i}");

    // you want to print iterations 5006 to 5010
    cond_range(5006, 5)->pr($i); // prints: 5006, 5007, 5008, 5009, 5010

    // you want to print the end of the loop
    cond_from('end')->pr($i); // prints: 10000    
}

Yep, thats how simple it is to use! You just grab the Front::i() instance and call one of the Debug Methods., (*3)

How to install it., (*4)

Requirements

  • PHP 5.3
  • XDebug (optional)

Installation

Composer

If your project uses Composer, just add to composer.json:, (*5)

"require": {
    "franz-deleon/fdl-debug": "dev-develop"
}

or add using command line:, (*6)

$> php composer.phar require franz-deleon/fdl-debug

GitHub

No Composer, no problemo. Use git., (*7)

$> cd path/to/lib/fdldebug
$> git clone git@github.com:franz-deleon/FdlDebug.git .

Enabling for procedural projects

If you dont use Composer or use any autoloading, including the Bootstrapper.php file will autoload the library for you., (*8)

include_once 'path/to/fdldebug/Bootstrapper.php';

// call the instance
\FdlDebug\Front::i()->pr('wuzzup'); //outputs: "wuzzup"

Conditions

Conditions as what I call it is the butter of FdlDebug. It basically adds features on how you call your prints or var_dumps via the Front instance., (*9)

1. Boolean Condition - condBoolean(bool $booleanExpression) | cond_bool(bool $booleanExpression)

The Boolean Condition is a simple way of passing boolean expression to determine if your data should be printed., (*10)

For example, only print if the condition evaulates to true:, (*11)

use \FdlDebug\Front as Fdbug;

$x = rand(1, 10); // assume $x is 5
Fdbug::i()->condBoolean($x === 5)->pr('Yep its 5'); // outputs: Yep its 5
// function hybrid style
cond_bool($x === 5)->pr('Yep its 5');

How about if I only want to print if the loop iteration is of even numbers., (*12)

for ($x = 1; $x <= 5; ++$x) {
  Fdbug::i()->condBoolean($x % 2 === 0)->pr("$x is even"); 
  // function hybrid style
  cond_bool($x % 2 === 0)->pr("$x is even"); 
}
// outputs: 
// 2 is even
// 4 is even
2. Loop Range Condition - loopRange(int $offsetStart [, int $length]) | cond_range(int $offsetStart [, int $length])

The Loop Range condition is useful when printing a range of data inside a loop., (*13)

For example, only print when the iteration of the loop is the 3rd upto the end., (*14)

use \FdlDebug\Front as Fdbug;

for ($x = 1; $x <= 5; ++$x) {
  Fdbug::i()->loopRange(3)->pr($x);
  // function hybrid style
  cond_range(3)->pr($x); 
}
// outputs:
// 3
// 4
// 5

loopRange($range [, int $length]) also accepts a length parameter if you only want to print certain length of ranges, (*15)

for ($x = 1; $x <= 5; ++$x) {
  Fdbug::i()->loopRange(2, 2)->pr($x);
  // function hybrid style
  cond_range(2, 2)->pr($x);
}
// outputs:
// 2
// 3

For multiple nested loops, you need to add rangeNestedEnd() at the end of each nested loop:, (*16)

for ($x = 1; $x <= 2; $x++) {
    Fdbug::i()->loopRange(2, 1)->pr("1st:" . $x);
    // function hybrid style
    cond_range(2, 1)->pr("1st:" . $x);

    for ($y = 1; $y <= 3; $y++) {
        Fdbug::i()->(3, 1)->pr("2nd:" . $y);
        // function hybrid style
        cond_range(3, 1)->pr("2nd:" . $y);
    }

    // the nested end identifier needs to be place here
    Fdbug::i()->(3, 1)->rangeNestedEnd();
    // function hybrid style
    cond_range_nested_end(); 
}

// outputs
// 2nd:3
// 1st:2
// 2nd:3
3. Loop From Condition - loopFrom(string $expression [, int $length]) | cond_from(string $expression [, int $length])

The Loop From condition is a pretty dynamic condition designed if you dont know the count of your loop iterations., (*17)

For example, you want to print the end iteration of a mysql resource., (*18)

use \FdlDebug\Front as Fdbug;

// asume the end outputs "123"
while ($row = mysql_fetch_assoc()) {
   Fdbug::i()->loopFrom('end')->pr($row['col']);
   // function hybrid style
   cond_from('end')->pr($row['col']);
}
Fdbug::i()->loopFromFlush(); // you need to call loopFromFlush() at the end of the loop
// function hybrid style
cond_from_flush();

// outputs:
// 123

When using loopFrom(), you need to call loopFromFlush() at the end of the loop in order to print the data., (*19)

How about if you only want to print the 3rd iteration from the 'end' of the loop?, (*20)

for ($x = 1; $x <= 10; ++$x) { // for simplicity, i am using a for loop
    Fdbug::i()->loopFrom('3rd from end')->pr($x);
}
Fdbug::i()->loopFromFlush();
// outputs:
// 8
// 9
// 10

Lets print the middle of the loop., (*21)

for ($x = 1; $x <= 5; ++$x) {
    Fdbug::i()->loopFrom('middle', 1)->pr($x);
}
Fdbug::i()->loopFromFlush();
// outputs:
// 3

How about 2 iterations before the median/middle of 5?, (*22)

for ($x = 1; $x <= 5; ++$x) {
    Fdbug::i()->loopFrom('2 before median', 1)->pr($x);
}
Fdbug::i()->loopFromFlush();
// outputs:
// 1

The loopFrom(string $expression) accepts expression type statements so these type of statements are valid:
"first", "beginning", "start", "middle", "median", "2 before middle", "2 after median",
"3rd from start", "4th from last", "5th from end", "end", "last", ..., (*23)

As you may have noticed, you can also pass a length variable to loopFrom(strin $expression [, int $length]), (*24)

for ($x = 1; $x <= 10; ++$x) {
    Fdbug::i()->loopFrom('4th from last', 2)->pr($x);
}
Fdbug::i()->loopFromFlush();
// outputs:
// 7
// 8

You can also use multiple loopFrom conditions (also true for other conditions) while in nested loops., (*25)

$fdbug = Fdbug::i();
for ($i = 1; $i <= 5; $i++) {
    $fdbug->loopFrom('3rd from end', 1)->pr("3rd-from-end:" . $i);
    for ($x = 1; $x <= 5; $x++) {
        $fdbug->loopFrom('2nd from start', 1)->pr("2nd-from-start:" . $x);
    }
}
$fdbug->loopFromFlush(); // now flush everything!
// outputs:
// 3rd-from-end:3
// 2nd-from-start:2
Session Instance Condition

In development, (*26)

Chaining Conditions

You can chain conditions if you want., (*27)

use \FdlDebug\Front as Fdbug;

for ($x = 1; $x <= 10; ++$x) {
    Fdbug::i()
        ->condBoolean($x % 2 === 0)
        ->loopRange(3, 4)
        ->pr($x)
    ;
    // procedural style
    cond_bool($x % 2 === 0)
        ->cond_range(3, 4)
        ->pr($x);
}
// outputs:
// 4
// 6

Debug Methods

  • fd_i() - function to retrieve the fdldebug instance
  • fd_writer() - function to retrieve the writer object instance
  • pr(mixed $value) - alias for printNow()
  • prd(mixed $value) - same as pr() but dies automatically
  • printObject(object $value) | pr_object - outputs information on an object
  • printNow(mixed $value) | pr_now(mixed $value) - prints something by passing the argument $value to the Writer
  • printBackTrace($showVendor = false) | pr_backtrace($show_vendor = false) - prints a php back trace using the Writer
  • printFiles($showVendor = false) | pr_files($show_endor = false) - prints a file trace using the Writer
  • printGlobal(string $globalType = null) | pr_global(string $globalType) - prints data from php's global variables, (*28)

    \\ 'SERVER', 'GET', 'POST', 'FILES', 'REQUEST', 'SESSION', 'ENV', 'COOKIE'
    \FdlDebug\Front::i()->printGlobal('get');
    /** outputs
    outputs:
      array (size=28)
        'APPLICATION_ENV' => string 'local' (length=5)
        'WEB_ENV' => string 'local' (length=5)
        [...]
    */
    

XDebug Methods (extension)

  • printXdebugTracedVar(string $search, bool $showVendor) | prx_trace_var(string $search, bool $showVendor) - prints a trace of the target variable $search. This method makes use of XDebug's tracing functionality by looking at XDEBUG_TRACE=1, (*29)

    Example output:, (*30)

    ```php // in Bootstrap.php line 20 of some mvc framework, pretend below is written: $hello = "hello world";, (*31)

    // Now pretend you are in XController.php of some mvc framework \FdlDebug\Front::i()->printXdebugTracedVar('hello'); /** outputs: array (size=1) 1 => array (size=4) 'file' => string '/someframework/Bootstrap.php' (length=54) 'line' => string '20' (length=2) 'var($hello) assignment' => array (size=1) 0 => string '$hello = 'hello' (length=15) 'initialization' => string '$hello = 'hello world'' (length=22) */ ```, (*32)

    *Please remember that you need to enable XDEBUG_TRACE. You can use some XDebug browser extensions to enable it or by passing XDEBUG_TRACE to http://domain.com/?XDEBUG_TRACE=1 (not recommended), (*33)

The Versions

29/04 2016

dev-develop

dev-develop https://github.com/franz-deleon/FdlDebug

A super simple, no dependency, extendable PHP debugger helper.

  Sources   Download

MIT

The Requires

  • php >=5.3.3

 

by Franz de Leon

print_r var_dump debugger fdldebug

18/08 2014

dev-master

9999999-dev https://github.com/franz-deleon/FdlDebug

A super simple, no dependency, extendable PHP debugger helper.

  Sources   Download

MIT

The Requires

  • php >=5.3.3

 

by Franz de Leon

print_r var_dump debugger fdldebug