ahsc 1 Denunciar post Postado Agosto 23, 2011 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
William Bruno 1501 Denunciar post Postado Agosto 23, 2011 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
ahsc 1 Denunciar post Postado Agosto 23, 2011 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
William Bruno 1501 Denunciar post Postado Agosto 23, 2011 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
ahsc 1 Denunciar post Postado Agosto 23, 2011 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
William Bruno 1501 Denunciar post Postado Agosto 23, 2011 use o Responder Azul 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
Andrey Knupp Vital 136 Denunciar post Postado Agosto 23, 2011 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
ahsc 1 Denunciar post Postado Agosto 23, 2011 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