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

(Resolvido)Problemas com OO


McBlade

Pergunta

Boa tarde amigos, andei sumido por muito tempo pois meu foco sempre foi Delphi. :blush:

Estou refatorando alguns relatórios antigos em PHP e resolvi criar uma classe para que fosse mais fácil gerenciar as SQL's de filtros e combos (famoso input-select).

Segue o conteúdo das units.

unit uclasses.php
//------------------
class TStringList
{
  var $text;
  function clear()
  {
    $this->text = '';
  }
  function add($s)
  {
    if (trim($this->text) == "")
      $this->text = $s;
    else
      $this->text .= " " . $s;
  }
}

unit umysql.php
//------------------
include("uclasses.php");
class TMySQLQuery
{
  var $name;
  var $sql;
  var $resultado
  private $database;
  function __construct($AOwner, $AName)
  {
    if (!is_object($AOwner))
    {
      die("Erro ao criar Query, objeto pai inválido.");
    }
    if (trim($AName) == '')
    {
      die("Erro ao criar Query, o valor de AName nã pode ser ''.");
    }
    $this->sql = new TStringList(); // a criação da variavel $sql me parece correta
    $this->name = $AName;
    $this->database = $AOwner;
  }
  // ...
}

unit urelatorio.php
//------------------
<?php
  include("umysql.php");
  //... conexão com o banco de dados
  $query = new TMySQLQuery($db,"Query1");
  $query->sql->clear(); // aqui curiosamente não dá erro
  $query->sql->add("select * from teste");
  $query->open();
  $config = array();
  $config = $query->resultado;

  function daerro()
  {
    $query->sql->clear(); // aqui dá erro, mas la no outro clear não deu... por quê?
    $query->sql->add("select * from erro");
    $query->open();
    return $query->resultado["campoqualquer"];
  }
  echo daerro();
?>

O que eu acho estranho é justamente que quando eu chamo clear() da variável $query->sql na segunda vez que dá erro de Call a member function on a non-object. Na primeira ele até executa a SQL. :wacko:

Editado por McBlade
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Salve,

Complicado hein.....

function daerro()
{
    global $query;
    $query->sql->clear(); // aqui dá erro, mas la no outro clear não deu... por quê?
    $query->sql->add("select * from erro");
    $query->open();
    return $query->resultado["campoqualquer"];
}

Link para o comentário
Compartilhar em outros sites

  • 0

Olá, obrigado pela rápida resposta. O global fez não dar erro, mas também não vem dados, tipo, ao dar open() na query o conteúdo de $sql->text está vindo vazio.

function open()
{
  $this->fquery = mysql_query($this->sql->text, $this->database) or die("$this->name:<br />$this->sql->text");
  if ($this->fquery)
    $this->resultado = mysql_fetch_array($this->fquery);
  else
    $this->resultado = array();
  return $this->fquery;
}

Link para o comentário
Compartilhar em outros sites

  • 0

Marcos,

Organizei algumas coisas para melhor ajudar.

<?php

//funcoes.php
function __autoload($classname)
{
    $filename = "$classname.class.php";
    if(file_exists($filename))
    {
        include_once($filename);
    }
}

function daerro()
{
    global $query;
    if(!is_object($query))
    {
        die('<h1>a variavel global $query não é um objeto</h1>');
    }
    $query->sql->clear(); 
    $query->sql->add("select * from erro");
    $query->open();
    return $query->resultado["campoqualquer"];
}
<?php
//TMySQLQuery.class.php
class TMySQLQuery
{
    public $name;
    public $sql;
    public $resultado;
    private $database;
    
    public function __construct($AOwner, $AName)
    {
        if (!is_object($AOwner))
        {
            die("Erro ao criar Query, objeto pai inválido.");
        }
        if (trim($AName) == '')
        {
            die("Erro ao criar Query, o valor de AName nã pode ser ''.");
        }
        $this->sql = new TStringList(); // a criação da publiciavel $sql me parece correta
        $this->name = $AName;
        $this->database = $AOwner;
    }
    // ...
    
    public function open()
    {
    }
}
<?php
//TStringList.class.php
class TStringList
{
    public $text;
    public function clear()
    {
        $this->text = '';
    }
    public function add($s)
    {
        if (trim($this->text) == "")
        {
            $this->text = $s;
        }        
        else
        {
            $this->text .= " " . $s;
        }        
    }
}
<?php
//teste.php
error_reporting(E_ALL & ~E_NOTICE | E_STRICT);

require_once('funcoes.php');

$db     = new stdclass();

$query  = new TMySQLQuery($db,"Query1");

$query->sql->clear();

$query->sql->add("select * from teste");

$query->open();

$config = array();

$config = $query->resultado;

var_dump(daerro());

Link para o comentário
Compartilhar em outros sites

  • 0

Muito obrigado amigo Urso. A questão do global $query tinha resolvido o problema sim. Acontece que eu tive problemas no Order by da função que estava dando erro e só percebi após passar um pente fino depois de ler seu post. Nos parâmetros eu usei $campodescricao e no Order by estava escrevendo $descricao e o erro era do MySQL. Como o mysql_error me trazia apenas que havia um erro perto de '' eu não sabia de onde vinha a assombração :P . Até mais!

Editado por McBlade
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
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...