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...