PHP Reflections sao recursos muito interessante que se voce ainda nao conhece precisa conhecer agora. O principio e basicamente o seguinte: Voce pode executar metodos que lhe trazem detalhamento sobre o funcionamento de arquivos / classes / funcoes que existam no seu codigo em execucao./*** Apenas um pequeno exemplo*/class exemplo{}$objReflection = new ReflectionClass( $strClass );print $objReflection->getClassName();print $objReflection->getDocComment();Utilizando reflections e possivel, por exemplo, se listar os parametros de um metodo ou funcao, podendo obter o nome, tipo e valor padrao, se houver, se cada um deles. Esses recursos podem ser extremamente uteis para possibilitar um debuger melhor, como se pode ver na ferramenta de backtrace do Renan de Lima.Mas, as vezes, para poder se fazer funcionalidades realmente avancadas pode-se precisar d estender a classe das notacoes. Isso pode se tornar algo um tanto trabalhoso de se fazer tendo em vista as referencias cruzadas.Por exemplo:class teste{}class novaReflection extends ReflectionClass{}$objNovo = new novaReflection( "teste" );if ( $objNovo->getMethod( 'vai' )->getDeclaringClass() instanceofnovaReflection ){ print "bem que voce gostaria.";}else{ print "problema dificil de resolver";}Ao se tentar pegar a classe de reflexao da classe que contem o metodo vai o php nao retornou a classe estendida novaReflection mas a classe ReflectionClass original. A referencia Elemento->getFilho()->getPai() falha nao retornando um objeto da mesma classe do Elemento.Essa situacao problema se replica em todas as classes do Reflection. E, na ideia de se facilitar a criacao de estensoes para classes de reflection eu lhes ofereco o pacote de ExtendedReflection. Esse pacote de classes sao estensoes das classes do Reflection, mas com metodos chaves que, ao serem sobrepostos tornam facil o processo de criacao de estensoes das classes dos reflections.Ficou confuso? Entao vamos a um exemplo:Ao inves de se estender diretamente a classe do ReflectionClass voce ira estender a classe ExtendedReflectionClass e devera sobrescrever os seguintes metodos:createExtendedReflectionClasscreateExtendedReflectionPropertycreateExtendedReflectionMethodEstes metodos servem para converter um objeto do pacote Reflection nativo em uma objeto do pacote estendido de Reflection, tornando os links internos validos.Um pacote estendido para demonstrar isso e o Code Reflection que estende o pacote ExtendedReflection adicionando metodos novos nas classes de reflection o que torna possivel se obter os codigos php dos objetos refletidos.note em especial os seguintes metodos:/*** Make the recursive calls and indirectly call return the extended reflection object and not* a native reflection property.** @see ExtendedReflectionClass::createExtendedReflectionProperty( ReflectionProperty )* @param ReflectionProperty $objOriginalReflectionClass* @return CodeReflectionProperty*/protecte function createExtendedReflectionProperty ( ReflectionProperty $objOriginalReflectionProperty ){return new CodeReflectionProperty( $this->getName() , $objOriginalReflectionProperty->getName() );}/*** Make the recursive calls and indirectly call return the extended reflection object and not* a native reflection method.** @see ExtendedReflectionClass::createExtendedReflectionMethod( ReflectionMethod )* @param ReflectionMethod $objOriginalReflectionClass* @return CodeReflectionMethod*/protected function createExtendedReflectionMethod ( ReflectionMethod $objOriginalReflectionMethod ){return new CodeReflectionMethod ( $this->getName() , $objOriginalReflectionMethod->getName() );}Todas as referencias a objetos do pacote do reflection externos passaram antes, necessariamente, por esses metodos, que convertem o objeto reflection nativo no objeto reflection estendido.Deste modo voce tem a flexibilidade de estender uma classe com a riqueza dos recursos de uma classe de reflexao sem complicacao, podendo gerar produtos bem legais como estamos fazendo no CodeToDiagram Recentemente estive procurando ferramentas gratuitas para criacao de diagramas BPMN. Resolvi fazer este post para listar as melhores opcoes encontradas:BizAgiPontos