Artigo: Error PHP 7.2: count(): Parameter must be an array or an object that implements Countable - Gigasystems

Blog

Em por

error-php-7-2-count-parameter-must-be-an-array-or-an-object-that-implements-countable
Error PHP 7.2: count(): Parameter must be an array or an object that implements Countable

Se você está recebendo este erro em alguma função que funcionava normalmente e após atualizar sua versão do PHP para 7.2.x e ela te retorna a mensagem “PHP 7.2: count(): Parameter must be an array or an object that implements Countable”, seus problemas acabaram!

Traduzindo o erro, significa que “O parâmetro deve ser uma matriz ou um objeto que implemente Contábil”, ou seja, não nulo. Mas porque isso acontece somente com essa versão?

Nós desenvolvedores sempre sofremos com atualizações, descontinuações, etc. e nesse caso não é diferente. Foi alterada a lógica da função nativa count(), onde na versão do PHP 7.2 é preciso que o $array usado na função count($array) não pode ser um valor NULL.

Para corrigir esse problema é simples (rsrsrs... depois de sofrer 1 dia inteiro para resolver), basta você criar uma variável antes e setar ela com um valor, veja:

//ANTES
if (count($this->documents) == 0) {
	//seu código aqui…
}

//DEPOIS DO PHP 7.2.X
$pkCount = (is_array($this->documents) ? count($this->documents) : 0);
if ($pkCount == 0) {
	//seu código aqui...
}

Primeiro criamos e setamos uma variável e logo a seguir, testamos se ela é um array válido, se for, obtém a quantidade de itens no array, senão, setamos com um valor qualquer, no caso, usei 0 para continuar com a lógica normalmente como era.

Este problema começou a aparecer em testes de desenvolvimento de um e-commerce que estamos desenvolvendo, utilizando como forma de pagamento o PagSeguro, onde parou de funcionar do nada, e depois de vários testes, resolvi subir para hospedagem, sugerido pelo amigo Marcio Sales, e foi batata, lá como ainda estava com 5.6.x funcionava direitinho. Foi ai que resolvi procurar com calma aonde estava o problema e vi essa ressalva, onde coloquei em prática e resolveu o problema, funcionando agora na versão PHP 7.2.

Era isso ai pessoal, espero ter ajudado e lembre-se, o mesmo problema pode acontecer com a função sizeof(), por se tratar de um alias da função count().
 

Olá, deixe seu comentário para Error PHP 7.2: count(): Parameter must be an array or an object that implements Countable

Já temos 6 comentário(s). DEIXE O SEU :)
Rodrigo Lopes

Rodrigo Lopes

Obrigado Marcos!!

Me ajudou muito, quebrei a cuca também mas só implementar seu código ao meu e funcionou..

Waleu mesmo!
★★★★★DIA 12.11.18 20h55RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Marcos Vinicius Nunes Ferreira

Marcos Vinicius Nunes Ferreira

Me ajudou muito aqui, tinha um sistema que estava na versão 7.1 e não estava dando erros com esta função, me parece que foi a partir da 7.2 mesmo que mudaram. Mas eu já tinha quebrado muito a cabeça tentando corrigir alguns erros aqui. Parabéns e obrigado pela ajuda
★★★★★DIA 21.10.18 23h00RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Petrus Rennan

Petrus Rennan

Fatal error
: Uncaught Error: Using $this when not in object context in C:\xampp\htdocs\aporte\wp-content\themes\aporte\template-parts\planos\planos-loop.php:18 Stack trace: #0 C:\xampp\htdocs\aporte\wp-includes\template.php(690): require() #1 C:\xampp\htdocs\aporte\wp-includes\template.php(647): load_template('C:\\xampp\\htdocs...', false) #2 C:\xampp\htdocs\aporte\wp-includes\general-template.php(155): locate_template(Array, true, false) #3 C:\xampp\htdocs\aporte\wp-content\themes\aporte\single-plano.php(28): get_template_part('template-parts/...', 'loop') #4 C:\xampp\htdocs\aporte\wp-includes\template-loader.php(74): include('C:\\xampp\\htdocs...') #5 C:\xampp\htdocs\aporte\wp-blog-header.php(19): require_once('C:\\xampp\\htdocs...') #6 C:\xampp\htdocs\aporte\index.php(17): require('C:\\xampp\\htdocs...') #7 {main} thrown in
★★★★★DIA 21.09.18 11h42RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

É porque você ao invés de por a sua VARIÁVEL, colocou a minha do exemplo, portanto ela não existe em seu contexto, por isso o erro!


$pkCount = (is_array($this->documents) ? count($this->documents) : 0); // ESTÁ ASSIM NO SITE


$pkCount = (is_array($sua-variavel) ? count($sua-variavel) : 0); // USA A SUA VARIÁVEL


 


Att. Marcos

★★★★★DIA 21.09.18 13h38RESPONDER
N/A
Enviando Comentário Fechar :/
Yuri Bigio

Yuri Bigio

Onde coloco esse código?
★★★★★DIA 31.07.18 08h57RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

Não é onde coloco esse código...


...e sim, se você estiver usando o PHP 7.2.X e por acaso estiver com esse problema "Error PHP 7.2: count(): Parameter must be an array or an object that implements Countable", precisa antes testar se realmente é um array válido, porque agora nesta versão do PHP, o array não pode ser NULL, para obter a quantidade de registros dentro dele. Então basta trocar o exemplo de antes, pelo depois ali no artigo.

★★★★★DIA 31.07.18 09h58RESPONDER
N/A
Enviando Comentário Fechar :/
Enviando Comentário Fechar :/

Veja Também:

Artigos Relacionados a categoria: Blog

Soluções

...CURTIU? AINDA NÃO VIU NOSSO PORTFÓLIO?


Se ainda não viu nosso Portfólio e quer conhecer um pouco mais... aproveite, veja agora mesmo nossos Cases de Sucesso e tenha seu site nos padrões atuais preparado para maioria dos dispositivos e navegadores.