WS
            
                Problema com TCriteria  
                
                
            
            
            
            Boa tarde a todos!
Está acontecendo algo que no mínimo é estranho.
Montei um método onde ele recebe um TCriteria como parâmetro. Esse TCriteria é montado baseado em escolhas do usuário.
Esse TCriteria é utilizado como base para construir outros 3 TCriteria diferentes.
A questão é que se eu der um var_dump no $param logo no início do método ele está exatamento como enviado pelo outro método, mas se der um var_dump no $param no final, depois de ter criado os outros 3 TCriteria ele terá recebido os filtros dos TCriteria contruidos abaixo, sendo que em nenhum momento eu atribui os filtros a ele.
Alguem sabe o que estaria acontecendo?
Segue uam simulação do código abaixo:
Obrigado.
            
        Está acontecendo algo que no mínimo é estranho.
Montei um método onde ele recebe um TCriteria como parâmetro. Esse TCriteria é montado baseado em escolhas do usuário.
Esse TCriteria é utilizado como base para construir outros 3 TCriteria diferentes.
A questão é que se eu der um var_dump no $param logo no início do método ele está exatamento como enviado pelo outro método, mas se der um var_dump no $param no final, depois de ter criado os outros 3 TCriteria ele terá recebido os filtros dos TCriteria contruidos abaixo, sendo que em nenhum momento eu atribui os filtros a ele.
Alguem sabe o que estaria acontecendo?
Segue uam simulação do código abaixo:
 - <?php
 -     public static function onbBuildDashboard($param)
 -     {      
 -         try
 -         {              
 -             if( $param != NULL )
 -             {
 -                 
 -                 // 1 criteria
 -                 $criteria = $param;
 -        
 -                 $repository = new TRepository('MsMsgLog');            
 -                 $criteria->setProperty('order' , 'data_alt');
 -                 
 -                 $msmslog_total = $repository->load($criteria);         
 -                
 -                 // 2 criteria
 -                 $criteria_sucesso = $param;
 -                 $criteria_sucesso->add(new TFilter('status', '=', 'S'));                         
 -                 $msmslog_sucesso = $repository->load($criteria_sucesso);
 -                 // 3 criteria
 -                 $criteria_erro = $param;               
 -                 $criteria_erro->add(new TFilter('status', '=', 'E')); 
 -                 $msmslog_erro = $repository->load($criteria_erro);                     
 -             }
 - ?>
 
 Obrigado.
up
https://www.php.net/manual/pt_BR/language.oop5.references.php
"Quando um objeto é enviado por argumento, retornado ou atribuído a outra variável, as variáveis diferentes não são sinônimos: elas armazenam uma cópia do identificador, que aponta para o mesmo objeto."
Ou seja, ao fazer $criteria = $param, modificações em qualquer dessas variáveis vai afetar ambas. Para evitar isso, use o clone:
Oi Nataniel Rabaioli,
dessa eu não sabia...
Muito obrigado pela ajuda...