Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Luis Paullo

[Resolvido] pegar Nome do Metodo

Recommended Posts

Salve pessoal ..

 

tenho a seguinte saida..

object(LogsRegister_Exc)[5]
 protected 'adapter' => 
   object(controller_combo)[2]
     public 'ct' => 
       array
         1 => string 'PHP' (length=3)
         2 => string 'Javascript' (length=10)
         3 => string 'Frameworks' (length=10)
         4 => string 'SEO' (length=3)
         5 => string 'AJAX' (length=4)
         6 => string 'CMS' (length=3)

 protected 'method' => string 'combo' (length=5) // quero pegar o nome desse medoto para uma comparação

 

essa zebra executa o metodo combo() e grava no Log.. So q queria registrar somente os insert e updates e tals... No log o REQUESTS de leitura não m intereção serem registrados..

 

Tenho um objeto instanciando outro Objeto q por sua vez tem o metodo combo()

 


   public static function setLogger(LogsRegister_Command $method) {

//        $modelReflector = new ReflectionClass($method);        minha tentativa foi essa e me retorna erro
//        $method = $modelReflector->getMethod($modelReflector);

       switch ( $method ) {

           case 'insert':

               return $this->log($method);
               break;
           case 'update':

               return $this->log($method);
               break;
           case 'delete':

               return $this->log($method);
               break;
           default :
               var_dump( $method );
       }
   }

 

sera q tem alguma forma com Reflection de faze isso?

ou pega esse objeto tranforma em array e filtra dela a String? =X

 

agradeço desde já a Ajuda..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi nada.

 

Pelo título e a descrição do tópico você estava no caminho certo, seu código comentado também, qual o problema? O que é retornado pela Reflection?

Compartilhar este post


Link para o post
Compartilhar em outros sites

=X

 

Resolvido..

o reflection dava um erro cabeludo... U.u

 

mais fiz assim e resolvi ..

 

$array = (array) $method;

       switch (array_pop($array)) { ....

 

vlw a força

Compartilhar este post


Link para o post
Compartilhar em outros sites

essa zebra executa o metodo combo() e grava no Log.. So q queria registrar somente os insert e updates e tals... No log o REQUESTS de leitura não m intereção serem registrados..

 

Hummmm, estou sentindo um mau cheiro no seu código. Você mostrou apenas um dump do objeto, tem como você dar mais detalhes sobre o problema que quer resolver e mostrar o código na íntegra?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora que eu li com mais calma, que entendi o porquê de não ter funcionado.

 

O construtor de ReflectionClass recebe, seja como string, seja como objeto, a classe que será refletida. Pela menos pela nomenclatura do seu código, você informou o método.

 

E quando você invocou ReflectionClass::getMethod(), você informou o objeto da própria ReflectionClass. E ReflectionClass::getMethod() requer uma string e não um objeto.

 

Você não deve ter visto erro, ou porque seus alertas estão desativados ou baixo demais, ou por causa do auto cast que converteu o objeto passado para string, invocando, assim, ReflectionClass::__toString().

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hummmm, estou sentindo um mau cheiro no seu código. Você mostrou apenas um dump do objeto, tem como você dar mais detalhes sobre o problema que quer resolver e mostrar o código na íntegra?

 

meu topico de referencia... Bom o codigo e seu kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk

 

Mais a kakinha que fez nele fui eu =X

 

http://forum.imasters.com.br/topic/452441-dependencias-entre-um-objeto-srp/

 

So que ainda to aprendendo.. esse lance d desing é dose =X

 

Fiz uma mudança nele pra se encaixa na minha necessida (obvio que fico meio gambiarra eu acho )=X

 

Então to usando o Chain Of Responsibility que você sugere no topico .. onde tem o esquema do rollBack (vo implementa no meu codigo gostei muito dakilo *____*)

 

ai fiz assim:

class LogsRegister_CreateCommand extends LogsRegister_Abstract {

   public function execute() {

       if (method_exists($this->adapter,$this->method )) {

           $parameter = null;//não usado
           call_user_func(array($this->adapter, $this->method), $parameter);
       } else {
           throw new ErrorException('Método não existe.');
       }
   }

}

Originalmente a codigo fazia 1 class pra cada execute().

so que meu codigo pega as Requests assim:


   $url = parse_url($_SERVER['REQUEST_URI']); // return array (path, query)
       $parameter = isset($_REQUEST['extra_params']) ? $_REQUEST['extra_params'] : null;

       parse_str($url['query'], $query);
       $classes = array_keys($query);
       $method = array_values($query);
       $class = 'controller_' . $classes[0];

       if ($method[0] == '')
           $method[0] = 'index';

       $invoker = new LogsRegister_Invoker();
       $invoker->excMethods(new LogsRegister_CreateCommand(new $class(), $method[0]));

 

Bom o registerLogger simplismente executa o medoto e gera o log ai que juntei tudo pra minha aplicação =D

ou seja Todos meus REQUESTS passam pelo 'LogRegister'..

Caso eu queria registra tuda requisição eu tiro as condições e pronto ..

 

So q o Request de leitura(read) de lista Dados não m intereção serem gravado no arquivo.. (No momento não quero registra eles).

 

Ai precissava de uma condição onde fosse insert delete update ele gerasse o log..

 

As modificação que fiz no codigo original me obrigaram a isso..

 

Mudei a Class LOG assim:

class LogsRegister_Log {

   public function log(LogsRegister_Command $command) {
       return get_class($command);
   }

   public static function setLogger(LogsRegister_Command $method) {

       $array = (array) $method;

       switch (array_pop($array)) {

           case 'insert':
               self::log($method);
               break;
           case 'update':

               self::log($method);
               break;
           case 'delete':

               self::log($method);
               break;
           default :
               return;
       }
   }

}

 

bom foi ai que fiz o TOPICO eu precisava recupera o nome do Metodo que tinha sido executado..

poderia extende abstract no Log e pega o $this->method =X mais eu num queria extende mais nd kkk.. (se é q isso daria certo)

 

Bom Bruno eu vi o erro do Reflection por isso vim no forum pedi alguma alternativa..

 

No mais é isso ^^

Acho que fico bem confuso isso =X mais minha ideia foi cria um execute() mais dinamico sem a necessidade de uma class register_insert() e outra register_update();

(concerteza eu perco alguma coisa com essa modificação mais ainda vo descubri oque vai m custa isso =P)

 

Agora ta funcionando legal agradeço a atenção de vcs que realmente sempre tão ajudando o pessoal.. qndo pinta mais um problema venho aki enche vcs kkkkk

 

Mais o codigo num é zebra não, pelo contrario e muito bom *________*

 

a zebra que fez fui eu kkkk..

Compartilhar este post


Link para o post
Compartilhar em outros sites

...onde tem o esquema do rollBack (vo implementa no meu codigo gostei muito dakilo *____*)

 

Então é Command, não Chain of Responsibility.

 

Originalmente a codigo fazia 1 class pra cada execute().

...ai que juntei tudo pra minha aplicação =D

 

Certo, era Strategy e você cometeu um "patterncídio" ao fazer isso. Com Strategy você não precisaria desse switch-case.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Chain of Responsibility. era do Topico da validações né =X

troquei as bola aki..

 

(concerteza eu perco alguma coisa com essa modificação mais ainda vo descubri oque vai m custa isso =P)

 

Agora já sei oque é. =X

mais vo deixa o Strategy de lado . vo assassina o pattern so dessa vez kkkkkkkkkkkkkkk..

 

troquei 6 por meia duzia mais ta valendo =P

 

minha aplicação exigiu isso =P

 

vlw.. vo continua estudando os desing .. ainda tenho q evolui muito(muito msm...) pra te um conhecimento pleno no assunto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

minha aplicação exigiu isso =P

 

Não acredito nisso, na verdade, acredito que agora, depois dessa mudança, ela deva estar chorando. :P

 

vlw.. vo continua estudando os desing .. ainda tenho q evolui muito(muito msm...) pra te um conhecimento pleno no assunto.

 

Se quer estudar design em orientação a objetos, talvez o melhor caminho seja começar pelos princípios de design, antes de partir para padrões de design.

Compartilhar este post


Link para o post
Compartilhar em outros sites

hasuhaushuahsuha..

 

Ela ta chorando não ela ta funcionando que uma beleza kk..

foi o remedio que achei :natalw00t:

 

principios desing seriam esse padrões GoF ? ( vi aqui no Forum ja li alguns topicos ).

 

Tem algum artigo topico livro( portugues =X ) que fala disso =)

Grato!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ela ta chorando não ela ta funcionando que uma beleza kk..

foi o remedio que achei :natalw00t:

 

Então tá... :nataltongue:

 

principios desing seriam esse padrões GoF ? ( vi aqui no Forum ja li alguns topicos ).

 

Sem querer ser chato, mas já sendo (na verdade estou querendo ser chato sim porque é divertido)

 

Já parou para pensar que, se padrões GoF tratasse de princípios, se chamaria princípios GoF?

 

GoF organizaram um catálogo de padrões de design organizados segundo seus propósitos. :seta: https://www.google.c...s&tbm=bks&tbo=1

 

Tem algum artigo topico livro( portugues =X ) que fala disso =)

Grato!!

 

Sobre princípios eu não sei dizer, uma ótima referência sobre princípios você vai encontrar ao pesquisar sobre Robert "UncleBob" Martin. Sobre padrões, o GoF possui uma tradução para português.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tinha parado pra pensa não =X (mais que bom que existe os pensadores kkkkkkk)

 

enfim ninguem nasce sabendo ^^

 

vo pesquisa sobre isso. Muito Grato pelo ajuda e pela indicação..

 

vo para de revive esse topico que já morreu kkk

Abraços ...

Resolvido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.