Jump to content
Fórum Script Brasil
  • 0

Problema com variável indefinida


Plábyo Rainer Gianniany

Question

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 to comment
Share on other sites

3 answers to this question

Recommended Posts

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

Edited by Willian Gustavo Veiga
Link to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...