Ir para conteúdo

POWERED BY:

Arquivado

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

WGuedes

Erro expects parameter 1 to be array, null given

Recommended Posts

Olá Pessoal,

 

Estou tentando adicionar informações em uma lista, pórem aparece o erro:

 

Warning: array_merge() [function.array-merge]: Argument #1 is not an array in C:\wamp\www\Trabalho11\Lista_Cliente.php on line 26

 

Warning: array_slice() expects parameter 1 to be array, null given in C:\wamp\www\Trabalho11\Lista_Cliente.php on line 21

 

Warning: array_slice() expects parameter 1 to be array, null given in C:\wamp\www\Trabalho11\Lista_Cliente.php on line 22

 

Warning: array_merge() [function.array-merge]: Argument #1 is not an array in C:\wamp\www\Trabalho11\Lista_Cliente.php on line 26

object(Lista_Cliente)#1 (1) { ["lista":"Lista_Cliente":private]=> NULL }

 

Está passando valores nulos:

 

include "Teste.php";
include "Cliente.php";

class Lista_Cliente {
private $lista;

    public function _construct(){
        $this->lista=array();
    }

    public function remover($cliente, $pos){

        $anterior = array_slice ($lista,0, $pos);
        $posterior =array_slice ($lista,$pos +1);

        $mix = array_merge($anterior, $posterior);
    }

   public function add($cliente, $pos){
       $antes =  array_slice ($this->lista,0, $pos);
       $depois = array_slice ($this->lista,$pos);
       $novo = array($cliente);
      

       $this->lista = array_merge ($antes, $novo, $depois);

   }

}

Teste.php

 

include "Cliente.php";
include "Lista_Cliente.php";

   $lista = new Lista_Cliente();
   $cliente1 = new Cliente ("Wellington", 29051987, "Orfanatrófio");
   $cliente2 = new Cliente ("João",13101980,"Centro");
   $cliente3 = new Cliente ("Paulo", 20021990,"Praia de Belas");

   $lista->add ($cliente1,0);
   $lista->add ($cliente2,1);
   $lista->add ($cliente3,2);

   var_dump ($lista);

As funções remover e adicionar não funcionam

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

 	$anterior = array_slice ($lista,0, $pos);
	$posterior =array_slice ($lista,$pos +1);

 

A variável $lista, de dentro da sua classe, deve ser referenciada com $this.

 

 	$anterior = array_slice ($this->$lista,0, $pos);
	$posterior =array_slice ($this->$lista,$pos +1);

 

E tem outras coisas ai também, mas vai vendo isso primeiro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 	$anterior = array_slice ($lista,0, $pos); 	$posterior =array_slice ($lista,$pos +1);

 

A variável $lista, de dentro da sua classe, deve ser referenciada com $this.

 

 	$anterior = array_slice ($this->$lista,0, $pos); 	$posterior =array_slice ($this->$lista,$pos +1);

 

E tem outras coisas ai também, mas vai vendo isso primeiro.

 

Só um detalhezinho, André, que você esqueceu por desatenção somente, creio eu.

 

$this->lista. // sem o cifrão à frente de lista.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sem querer criar spam no tópico, André, mas frio mesmo tá na minha cidade natal, Rio Grande - RS. Sensação térmica de 7,5 graus. :o

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado pessoal, mas o erro continua, seria um problema de includes?

 

Está assim:

 

 

Teste.php

 

include "Cliente.php";
include "Lista_Cliente.php";

Cliente.php

 

include "Lista_Cliente.php";

Lista_Cliente.php

 

include "Teste.php";
include "Cliente.php";

Dessea maneira da erro Fatal error: Allowed memory size of

 

Tirando os includes da Fatal error: Cannot redeclare class Lista_Cliente in C:\wamp\www\Trabalho11\Lista_Cliente.php on line 6

 

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Experimente utilizar o include_once, ao invéz do include. Da mesma forma, no require, com require_once.

 

Outra dica seria você setar o valor inicial da propriedade $this->lista na sua própria declaração:

 

private $lista = array();

Assim você não precisa utilizar o construtor para uma coisa desse tipo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo já fiz as mudanças, porém da o erro Fatal error: Cannot redeclare class Lista_Cliente in C:\wamp\www\Trabalho11\Lista_Cliente.php on line 6

 

A linha 6 é class Lista_Cliente {

 

Será que falta uma include_once ou falta de parametros?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só para desencargo de consciência, coloque aqui o código da classe Cliente.

 

OBS: Você consegue ler o que o erro está lhe dizendo? Eu sugiro que o faça, pra poder entender.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou tentando, mas com as includes está dando erro:

 

Cliente.php

 

<?php 

include_once "Lista_Cliente.php";
include_once "index.php";

class Cliente{ 

    private $nome;
    private $data_nasc;
    private $endereco;    
  
    public function Cliente ($nome, $data_nasc, $endereco){
        $this->nome = $nome;
        $this->data_nasc = $data_nasc;
        $this->endereco = $endereco;
      }
    
	public function setNome($nome)
    { 
       $this -> nome = $nome;
    }

    public function setData_nasc($data_nasc)
    { 
       $this -> data_nasc = $data_nasc;
    }

    public function setEndereco($endereco)
    { 
       $this -> endereco = $endereco;
    }
     
    public function getNome()
   
     { 
     	return $this -> nome;
    }

    public function getData_nasc()
    { 
     	return $this -> data_nasc;
    }

    public function getEndereco()
    { 
     	return $this -> endereco;
    }

 }

?>

Lista_Cliente.php

 

<?php

include_once "Teste.php";
include_once "Cliente.php";

class Lista_Cliente {
private $lista;

    public function _construct(){
        $this->lista = array();
    }

    public function remover($cliente, $pos){

         $anterior = array_slice ($this->lista,0, $pos);
		 $posterior = array_slice ($this->lista,$pos +1);

        $mix = array_merge($anterior, $posterior);
    }

   public function add($cliente, $pos){
       $antes =  array_slice ($this->lista,0, $pos);
       $depois = array_slice ($this->lista,$pos);
       $novo = array($cliente);
      

     $this->lista = array_merge ($antes, $novo, $depois);

   }

}
?>

Teste.php

 

<?php

//include_once "Cliente.php";
include_once "Lista_Cliente.php";

   $lista = new Lista_Cliente();
   
   $cliente1 = new Cliente ("Wellington", 29051987, "Orfanatrófio");
   $cliente2 = new Cliente ("João",13101980,"Centro");
   $cliente3 = new Cliente ("Paulo", 20021990,"Praia de Belas");

   $lista->add ($cliente1,0);
   $lista->add ($cliente2,1);
   $lista->add ($cliente3,2);

   var_dump ($lista);

?>

Eu só quero fazer o Teste imprimir os clientes cadastrados.

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está sendo redundante. Está incluindo Index e Cliente. Em cliente você Inclui Lista e Teste, em Lista você inclui cliente e teste.

 

 

Primeiro passo: Organize-se.

 

Guarde dentro dos arquivos de classes APENAS O CONTEÚDO DELAS. Sem include, require, file_get_contents ou similares.

 

Crie um arquivo core.php ou dependencies.php onde você referencia classe e dependência e vai fazendo os includes necessários. Você mantém a aplicação no seu controle.

 

Por fim, seu arquivo teste.php ou index.php vai incluir APENAS a core.php, que se encarregará de todo o 'trabalho sujo'.

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.