Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ahsc

[Resolvido] Erro objeto

Recommended Posts

Olá, bom dia a todos. Estou criando uma classe, simples, para a inserção de conteúdos no bd e uma coisa "estranha" (porque não sei o que acontece) ocorreu. A classe é a seguinte, está em desenvolvimento:

 

class InsertItens
{
	/*
		classe utilizada para inserção de itens no bd
	*/

	public function __construct($table, $fields)
	{
		if(is_array($fields))
		{
			$campos = implode(',',array_values($fields));
			return $campos;
		}
	}


}

 

Sua chamada é a seguinte:

 

include_once("../class/InsertItens.class.php");
$table = 'teste';
$fields = array('Alexandre','Corrêa','sp');
$teste = new InsertItens($table, $fields);
echo $teste;

 

E dá esse erro:

 

Catchable fatal error: Object of class InsertItens could not be converted to string in C:\wamp\www\Testes\testes\index.php on line 15

 

Notei que isso ocorre quando, na classe, eu uso o return $campos. Se eu utilizar o echo $campos, o erro não ocorre. Por que isso ocorre e como resolver?

 

Obrigado a quem puder me dar um helps.......

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse return no construtor não faz sentido.

 

o construtor sempre vai retornar um objeto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse return no construtor não faz sentido.

 

o construtor sempre vai retornar um objeto.

Então, na verdade eu quero ver se ele executou legal o que eu pretendia. Pra dar um print na tela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Okay, faça de outra forma, e não com esse return no construtor.

 

minha sugestão, é você guardar essa string num atributo da classe, e depois dar echo desse atributo

class InsertItens
{
          public $campos;//depois ajuste a visibilidade

               public function __construct($table, $fields)
               {
                       if(is_array($fields))
                       {
                               $this->campos = implode(',',array_values($fields));
                       }
               }
}

 

e então:

        $teste = new InsertItens($table, $fields);
       echo $teste->campos;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Putz cara, é verdade. Valeu mesmo.

 

Tenho só mais uma dúvida com relação ao trecho

$this->campos = implode(',',array_values($fields));

 

 

esse trecho na verdade vao ser uma parte do código sql de inserção no bd. só que eu preciso pôr aspas no itens da array que forem string, como eu faço isso? Já pesquisei um monte e não consegui resolver.

Dei uma mudadinha no código para inserção e ficou algo mais ou menos assim:

 

//campos da tabela
$fields = array('Nome','Sobrenome','Idade');
//valores correspondentes a cada campo
$values = array('xxxx','yyyy', 31);

$teste = new InsertItens($table, $fields, $values);

echo $teste->campos.' - '.$teste->itens;

 

E a saída deu isso

 

Nome,Sobrenome,Idade - xxxx,yyyy,31 

Os campos estão separados por vírgula, só falta adicionar aspas para que o código fique mais ou menos assim

 

'Nome','Sobrenome','Idade' - 'xxxx','yyyy',31 

$sql = insert into nomes ('Nome', 'Sobrenome', 'Idade') Values ('xxxx', 'yyyy', 31);

 

Alguma idéia de como fazer isso?

 

valews mais uma vez

Compartilhar este post


Link para o post
Compartilhar em outros sites
use o Responder Azul respondery.png

ou a 'Resposta Rápida'.

 

Bom.. se vale a sugestão, olhe este tópico que iniciei:

http://forum.imasters.com.br/topic/409112-proposta-de-fluent-interface-dao-phpoo/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Construtores constroem, eles não retornam, se você quer dar um echo no objeto, faz um método toString retornando o valor de tal propriedade.

<?php 
     class Insert{

             private $campos;

             public function __construct( Array $fields ){
                    $this->campos = implode( ', ' , $fields );
             }

             public function __toString(){
                    return $this->campos;
             }

     }

     echo new Insert( Array( 'nome' , 'sobrenome' , 'cidade' ) );

 

Saída:

nome, sobrenome, cidade

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui por as "" aspas em strings vindas da array, assim o sistema monta o teste assim:

Nome,Sobrenome,Idade,data - 'xxxx','yyyy',31,'2011-08-23' 

 

O script ficou assim (classe):

 

class InsertItens
{
	/*
		classe utilizada para inserção de itens no bd
	*/
	public $campos;
	public $itens;

	public function __construct($table, $fields, $values)
	{
		$this->validarArrays($fields,$values);
	}

	public function validarArrays($fields,$values)
	{
		//verifica se o 2º e 3º parâmetros do método construtor são arrays. caso um dos itens não seja, gera erro
		if(is_array($fields) and is_array($values))
		{
			//verifica se os arrays contém a mesma quantidade de itens
			if(count($fields) == count($values))
			{
				//valida os itens da array.
				foreach($values as $item)
				{
					//se for string, insere aspas simples
					if(is_string($item))
					{
						$itemvalidado=$this->cleanuserinput($item);
						$newvalue[]="'$itemvalidado'";
					}
					else
					{
						$itemvalidado=$this->cleanuserinput($item);
						$newvalue[]=$itemvalidado;
					}

				}
			}
			else
			{
				echo "Erro: quantidade de campos é diferente da quantidade de itens a serem inseridos";
				die();
			}
		}
		else
		{
			echo "O 2º e 3º parâmetros da classe <strong>InsertItens</strong> devem ser arrays.";
			die();
		}
		$this->campos = implode(',',array_values($fields));
		$this->itens = implode(',',array_values($newvalue));
	}

	public function cleanuserinput($dirty)
	{
		if (get_magic_quotes_gpc()) 
		{
			$clean = mysql_real_escape_string(stripslashes(htmlspecialchars($dirty)));	 
		}
		else
		{
			$clean = mysql_real_escape_string(htmlspecialchars($dirty));	
		} 
		return $clean;
	}


}

 

e a chamada ficou assim

 

include_once("../class/InsertItens.class.php");
$table = 'teste';
$data = date('Y-m-d');
$nomes ="ted's burgerkink &";
$fields = array('Nome','Sobrenome','Idade','data');
$values = array($nomes,'xxx', 31, $data);
$teste = new InsertItens($table,$fields,$values);
echo $teste->campos.' - '.$teste->itens;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.