Ir para conteúdo
Fórum Script Brasil
  • 0

Problema com variável indefinida


Plábyo Rainer Gianniany

Pergunta

Olá pessoal, bom dia.

Pessoal, estou estudando o livro PHP Orientado a Objetos do Pablo Dall'Oglio, e cheguei no capítulo sobre Query Object.

Estou em uma parte que se cria uma classe chamada "TCriteria.php", e depois, cria-se uma página para testar essa classe,onde eu crio os objetos nela, essa página chama-se "criteria.php"

O problema que está ocorrendo é quando eu executo a página "criteria.php", aparece a seguinte mensagem no browser:

Notice: Undefined variable: operator in C:\wamp\www\php.poo\app.ado\TCriteria.class.php on line 28

Notice: Undefined variable: result in C:\wamp\www\php.poo\app.ado\TCriteria.class.php on line 42

Parece que está dizendo que eu não defini essas variáveis "operator" e "result", só que está igualzinho livro, idêntico.

Abaixo vou postar o código da classe TCriteria e do criteria.php para vocês verem, e peço por favor a ajuda de vocês, preciso de uma solução para este problema pois parei nesta parte já fazem dois dias.

Em negrito são as partes do código que está dando erro

TCriteria.class.php

<?php

/*

classe TCriteria

esta classe provê uma interface utilizada para definição de critérios

*/

class TCriteria {

private $expressions; // armazena as expressões

private $operators; // armazena a lista de operadores

private $properties; // propriedades do critério

/*

método add()

adiciona uma expressão ao critério

@param $expression = expressão (objeto TExpression)

@param $operator = operador lógico de comparação

*/

public function add(TExpression $expression, $operator = self::AND_OPERATOR) {

// na primeira vez, não precisamos de operador lógico para concatenar

// o comando empty verifica/informa se a variável está vazia

if(empty($this->expressions)) {

// o comando unset destrói a variável

unset($operator);

}

// agrega o resultado da expressão à lista de expressões

$this->expressions[]=$expression;

$this->operators[]=$operator;

}

/*

método dump()

retorna a expressão final

*/

public function dump() {

// concatena a lista de expressões

if(is_array($this->expressions)) {

foreach($this->expressions as $i=> $expression) {

$operator = $this->operators[$i];

// concatena o operador com a respectiva expressão

$result .= $operator. $expression->dump() . ' ';

}

// o comando trim retina espaço no início e final de uma string

$result = trim($result);

return "({$result})";

}

}

/*

método setProperty

define o valor de uma propriedade

@param $property = propriedade

@param $value = valor

*/

public function setProperty() {

$this->properties[$property] = $value;

}

/*

método getProperty

retorna o valor de uma propriedade

@param $property = propriedade

*/

public function getProperty($property) {

return $this->properties[$property];

}

}

?>

criteria.php

<?php

// carrega as classes necessárias

include_once 'app.ado\TExpression.class.php';

include_once 'app.ado\TCriteria.class.php';

include_once 'app.ado\TFilter.class.php';

/*

aqui vemos um exemplo de critério utilizando o operador OR

a idade deve ser menor que 16 ou maior que 60

*/

$criterio = new TCriteria;

$criterio->add(new TFilter('idade', '<', 16), TExpression::OR_OPERATOR);

$criterio->add(new TFilter('idade', '>', 60), TExpression::OR_OPERATOR);

echo $criterio->dump();

?>

Desde já agradeço, valeu.

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Talvez a execução está caindo nesse ponto:

unset($operator);

Verifique isso.

Esse livro é muito bom. Se realmente for um erro, sugiro que você entre em contato com o autor para que ele possa corrigir o livro nas próximas edições (ou publicar uma errata).

Outra coisa, não de "up" nos seus tópicos e sempre poste códigos entre a tag code do fórum.

Um abraço.

Editado por Willian Gustavo Veiga
Link para o comentário
Compartilhar em outros sites

  • 0

Hi.

Quanto ao primeiro erro:

Notice: Undefined variable: operator in C:\wamp\www\php.poo\app.ado\TCriteria.class.php on line 28

Conforme já foi dito aqui no tópico, o erro realmente está ao utilizar a função unset().

Não há lógica em destruir uma variável, e chama em seguida. Se precisar que o valor seja vazio, transforme em NULL ao invés de dar um unset:

$operator = null;
Quanto ao segundo erro, você está adicionando valores numa variável que não existe, ou seja, não foi definida antes. Basta declará-la antes de utilizar já concatenando:
$str = null;
$str .= 'fvox';

Se não houver a primeira declaração ali como NULL, vai ser disparado o warning.

[]'s

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...