Wednesday, 3 June 2015

PHP: I find the PHP equivalent of <cfdump> on GitHub shortly after I package it myself

Sometimes I don't know why I bother. Oh well: at least I know more about Composer now. That's useful.

Forever, there's been a PHP implementation of <cfdump>, over at As good as that is, I didn't want to "install" it via downloading the file and sticking it into our codebase, I decided the better approach would be to work out how to package it up and install it via composer. That's why I was horsing around with Composer for the last coupla days ("PHP: trying (but not succeeding) to create my own Github-based Composer Package" and "PHP: Fixed! My colleague sorts that Composer issue out for me").

So I grabbed dBug.php and stuck it in a Github repo (not in a James Harvey sort of way, I acknowledged the authorship of the code appropriately), and worked out how to load it via Composer and all the rest of that bullshit. I was knocking together the test code for this article when I did a slightly different Google search than usual and... found the version of it already on GitHub. Sigh. It's over here:

Oh well. Anyhow, in case yer a PHP person and don't know about <cfdump>, I'll write up the demo code anyhow.

Here we go:

// dump.php

require_once __DIR__ . '/../vendor/autoload.php';

$o = new dump\C('publicProperty value', 'protectedProperty value','privateProperty value');

$v = [
    'string' => 'a string',
    'object' => $o,
    'array' => $o->getProperties()

new dBug($v);

This outputs as follows:

Oh... C is defined thus:

// C.php

namespace dump;

class C {
    public $publicProperty;
    protected $protectedProperty;
    private $privateProperty;

    function __construct($publicProperty, $protectedProperty, $privateProperty){
        $this->publicProperty = $publicProperty;
        $this->protectedProperty = $protectedProperty;
        $this->privateProperty = $privateProperty;

    public function getProperties(){
        return $this->getAsArray();

    private function getAsArray(){
        return [
            'public' => $this->publicProperty,
            'protected' => $this->protectedProperty,
            'private' => $this->privateProperty

It just demonstrates the difference in handling non-public elements of objects.

That shits all over var_dump():

array(3) {
  string(8) "a string"
  object(dump\C)#2 (3) {
    string(20) "publicProperty value"
    string(23) "protectedProperty value"
    string(21) "privateProperty value"
  array(3) {
    string(20) "publicProperty value"
    string(23) "protectedProperty value"
    string(21) "privateProperty value"

So... yeah... that's it. I dunno how I didn't find the GitHub version earlier. All in all it was a helpful exercise, and hopefully I can coerce my Team Lead to let us integrate this with our dev environment.

I'm also gonna work out how to implement this as a Twig Extension too... but first I'll google to see if it's been done already ;-)