Fabem 0 Denunciar post Postado Agosto 13, 2010 Bom dia pessoALL Na função abaixo me diz que não posso usar o "$this->itens" como um array. Qual a solução? function valorCompra(){ $soma = 0; foreach ($this->itens as $codigo => $valor) $soma += $this->itens[$codigo]["preco"] * $this->itens[$codigo]["qtde"]; return (double)$soma; } Compartilhar este post Link para o post Compartilhar em outros sites
Lucas de Almeida 0 Denunciar post Postado Agosto 13, 2010 Tem certeza que ele é um array? Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Fabem 0 Denunciar post Postado Agosto 13, 2010 Sim, foi setado como array no início da classe. class ... { var $itens, $lista; function ...(){ ... settype($this->itens,"array"); ... } Compartilhar este post Link para o post Compartilhar em outros sites
Lucas de Almeida 0 Denunciar post Postado Agosto 13, 2010 Qual a linha do erro? Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Fabem 0 Denunciar post Postado Agosto 13, 2010 function valorCompra(){ $soma = 0; foreach ($this->itens as $codigo => $valor) $soma += $this->itens[$codigo]["preco"] * $this->itens[$codigo]["qtde"];//ERRO NESTA LINHA return (double)$soma; } Compartilhar este post Link para o post Compartilhar em outros sites
Lucas de Almeida 0 Denunciar post Postado Agosto 13, 2010 Seria essa a sua logica: $itens = array() $itens[$codigo_do_produto] = $objeto_produto; $itens[$codigo_do_produto2] = $objeto_produto; $itens[$codigo_do_produto3] = $objeto_produto; [..] Ou $itens = array() $itens[$codigo_do_produto] = $array_produto; $itens[$codigo_do_produto2] = $array_produto $itens[$codigo_do_produto3] = $array_produto [..] Estou correto? Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Fabem 0 Denunciar post Postado Agosto 13, 2010 Sim, exato. function addItem($codigo, $qtde, $preco){ if (!array_key_exists($codigo, $this->itens)) { $this->itens[$codigo] = array( "codigo" => $codigo, "qtde" => $qtde, "preco" => $preco ); ksort($this->itens); $this->lista = $this->itens; return array_key_exists($codigo, $this->itens); } else { $this->itens[$codigo]["qtde"] = $this->itens[$codigo]["qtde"] + $qtde; $this->lista[$codigo] = $this->itens[$codigo]; } } []'s Compartilhar este post Link para o post Compartilhar em outros sites
Lucas de Almeida 0 Denunciar post Postado Agosto 13, 2010 Fiz o seguinte: class Carrinho { public $itens = array() ; function valorCompra() { $soma = 0 ; foreach ( $this->itens as $codigo => $valor ) { $soma += $this->itens[$codigo]["preco"] * $this->itens[$codigo]["qtde"] ; //ERRO NESTA LINHA } return ( double )$soma ; } function addItem( $codigo, $qtde, $preco ) { if ( ! array_key_exists( $codigo, $this->itens ) ) { $this->itens[$codigo] = array( "codigo" => $codigo, "qtde" => $qtde,"preco" => $preco ) ; ksort( $this->itens ) ; $this->lista = $this->itens ; return array_key_exists( $codigo, $this->itens ) ; } else { $this->itens[$codigo]["qtde"] = $this->itens[$codigo]["qtde"] + $qtde ; $this->lista[$codigo] = $this->itens[$codigo] ; } } } $carrinho = new Carrinho() ; $carrinho->addItem( 1, 10, 3.50 ) ; $carrinho->addItem( 2, 10, 3.50 ) ; $carrinho->addItem( 2, 10, 3.50 ) ; $carrinho->addItem( 4, 10, 3.50 ) ; die( $carrinho->valorCompra() ) ; Não deu nenhum erro, debuga as variaveis que você passa no metodo addItem. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Fabem 0 Denunciar post Postado Agosto 13, 2010 Olha só a solução: class ... { var $itens, $lista; function ...(){ ... $this->itens = array(); //ao invés de settype($this->itens,"array"); ... } Parece brincadeira, mas não é. Obrigado pela atenção. Um abraço Só mais um detalhe: localhost funcionava, mas no servidor não. Compartilhar este post Link para o post Compartilhar em outros sites
Lucas de Almeida 0 Denunciar post Postado Agosto 13, 2010 Para falar a verdade, no meu funcionou das duas formas, deve ser alguma configuração no Peagape.ini Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Fabem 0 Denunciar post Postado Agosto 13, 2010 Só para deixar registrado, nas verdade a solução não foi a que passei, mas sim pq no meu computador as variáveis globais deixo desabilitadas e no servidor não estava desabilitado. A variável $this->itens estava se confundindo com alguma outra varíavel global $itens, não tipada. Solução: Desabilitar as variáveis globais do servidor. Por segurança, faça isso sempre. Sempre desabilito com código PHP, mas como arquivo com classe não incluia o arquivo que uso para desabilir as variáveis globais, dava esse erro. Como desabilitar: Com PHP: ini_set("register_globals","off"); Com .htaccess: php_flag register_globals off Com isto aprendi a sempre usar o .htaccess da raiz para desabilitar para todo o site. P.S.: A mesma solução se aplica para o erro "Fatal error: Cannot use object of type __PHP_Incomplete_Class as array". Compartilhar este post Link para o post Compartilhar em outros sites
dexterPHP 0 Denunciar post Postado Agosto 6, 2016 Isso jovem, as vezes tbm é a versão do php da pessoa que procurar resolver esse b.o. Compartilhar este post Link para o post Compartilhar em outros sites