Estou lendo um livro chamado PHP - Programando com Orientação a Objetos. E estou tentando implementar um projeto QUERY OBJECT que ele ensina a fazer.
No projeto, ele usa orientação a objetos para criar uma estrutura que faz com que você não precise digitar códigos em SQL para fazer uma consulta. Começa com a classe abstrata. TExpression, depois cria as classes filhas, TFilter, para retornar as expressões de Filtro (ex: idade > 10; outro exemplo, numero = 200) depois tem outra classe filha TCriteria, q junta os objetos do Tipo TFilter para criar uma string com várias expressões concatenadas e separadas pelo operador And ou OR, dependendo do parâmetro usado. Isso tudo usando dois, três ou vários objetos TFilter. Resultando numa string parecida com essa: "(idade > 10 OR idade < 90) AND (id > 30)".
Eu escrevi o código exatamente como o Livro ensina, mas estou tendo erros ao instanciar o Objeto do tipo TCriteria.
O projeto começa a ser ensinado na página 170. Se alguém quiser dar uma olhada e me ajudar.
Também vou tentar escrever logo abaixo as partes em q o erro está apresentado.
Quero muito entender o que o livro ensina, pois vai ser importante na hora de passar a próxima etapa.
Projeto QueryObject
TCriteria.class.php
class TCriteria extends TExpression{
private $expressions;
private $operators;
private $properties;
public function add(TExpression $expression, $operator = self::AND_OPERATOR){
if(empty($this->expressions))
{
unset($operator);
}
$this->expressions[] = $expression;
$this->operators[] = $operator;
}
public function dump()
{
if(is_array($this->expressions))
{
foreach ($this->expressions as $i => $expression)
{
$operator = $this->operators[$i];
$result = null;
$result .=$operator.' '. $expression->dump() . ' ';
}
$result = trim($result);
return "({$result})";
}
}
public function setProperty($property, $value)
{
$this->properties[$property] = $value;
}
public function getProperty($property)
{
return $this->properties[$property];
}
}
?>
Repare bem nestas linhas:
public function add(TExpression $expression, $operator = self::AND_OPERATOR){
if(empty($this->expressions))
{
unset($operator);
}
O erro está aqui, no unset($operator);
Pois ele elimina a variável e depois atribui a mesma variável a uma variável de instancia. Não entendi porque ele fez isso, mas está no livro.
O Erro mostrado é Undefinid variable in line....
Depois tem outra coisa q não entendo muito bem. Como funciona esse instanciamento no parâmetro da função?
O que é q significa essa variável $expression dentro da função add? Porque tem o nome da outra classe TExpression antes? Significa q o $expression é uma variável de instancia do objeto tipo TExpression? Ou TExpression é o objeto e logo após variáveis de Instancia devem ser adicionadas, e estas não tem nada haver com o objeto TExpression?
O livro não explica bem essa parte e gostaria muito de uma ajuda.
Pergunta
jefponte
Estou lendo um livro chamado PHP - Programando com Orientação a Objetos. E estou tentando implementar um projeto QUERY OBJECT que ele ensina a fazer.
No projeto, ele usa orientação a objetos para criar uma estrutura que faz com que você não precise digitar códigos em SQL para fazer uma consulta. Começa com a classe abstrata. TExpression, depois cria as classes filhas, TFilter, para retornar as expressões de Filtro (ex: idade > 10; outro exemplo, numero = 200) depois tem outra classe filha TCriteria, q junta os objetos do Tipo TFilter para criar uma string com várias expressões concatenadas e separadas pelo operador And ou OR, dependendo do parâmetro usado. Isso tudo usando dois, três ou vários objetos TFilter. Resultando numa string parecida com essa: "(idade > 10 OR idade < 90) AND (id > 30)".
Eu escrevi o código exatamente como o Livro ensina, mas estou tendo erros ao instanciar o Objeto do tipo TCriteria.
Aqui vai o download do livro em PDF: http://www.mediafire.com/view/?ax6jqg37nu7abye
O projeto começa a ser ensinado na página 170. Se alguém quiser dar uma olhada e me ajudar.
Também vou tentar escrever logo abaixo as partes em q o erro está apresentado.
Quero muito entender o que o livro ensina, pois vai ser importante na hora de passar a próxima etapa.
Projeto QueryObject
TCriteria.class.php
Repare bem nestas linhas:O erro está aqui, no unset($operator);
Pois ele elimina a variável e depois atribui a mesma variável a uma variável de instancia. Não entendi porque ele fez isso, mas está no livro.
O Erro mostrado é Undefinid variable in line....
Depois tem outra coisa q não entendo muito bem. Como funciona esse instanciamento no parâmetro da função?
O que é q significa essa variável $expression dentro da função add? Porque tem o nome da outra classe TExpression antes? Significa q o $expression é uma variável de instancia do objeto tipo TExpression? Ou TExpression é o objeto e logo após variáveis de Instancia devem ser adicionadas, e estas não tem nada haver com o objeto TExpression?
O livro não explica bem essa parte e gostaria muito de uma ajuda.
Editado por jefponteLink para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.