<?php

class Groot {
    
    private $name;
    
    private function __construct() {
        $this->name = "I'm groot!";
    }
    
    public function getName() {
        return $this->name;
    }
    
    public static function create($callback) {
        
        // Cria uma nova instância da classe:
        $new = new self();
        
        // Associa a função ao objeto:
        $callback = Closure::bind($callback, null, $new);
        
        // Invoca a função anônima passando a instância como parâmetro:
        $callback($new);
        
    }
    
}


Groot::create(function ($self) {
    echo $self->name, PHP_EOL;
});