Flatten deep inheritance trees in PHP to aid debugging
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src
tests/Test
.gitignore
.travis.yml
LICENSE
Makefile
README.mkd
composer.json
phpunit.xml

README.mkd

Flatclass

Given an object or class name, the Flatterer returns a 'flattened' version of a class; i.e. with non-overridden methods and properties from parent classes copied into it.

For example, the following code:

<?php
require __DIR__.'/vendor/autoload.php';

interface Nameable {
    public function getName();
}

class Animal implements Nameable {
    protected $name;
    public function __construct($name){
        $this->name = $name;
    }
    public function getName(){
        return $this->name;
    }
}

class Dog extends Animal {
    public function bark(){
        return "Woof!";
    }
}

$f = new \Flatclass\Flatterer('Dog');
echo $f->flatten('FlatDog');

Would produce a FlatDog class that looked like this:

<?php
class FlatDog extends \Animal implements \Nameable {

    protected $name;

    // From class Dog
    public function bark(){
        return "Woof!";
    }

    // From class Animal
    public function __construct($name){
        $this->name = $name;
    }

    // From class Animal
    public function getName(){
        return $this->name;
    }

}

Why?

This is meant as a debugging tool. With very deep inheritance hierarchies it can be difficult to mentally follow code execution paths that jump back and forth between several files.

While the generated class is not guaranteed to function in the same way as the original, some efforts are made to make it more likely; e.g. the resulting class has the same parent as the original to allow parent::method() calls to work.