Mostrando postagens com marcador Algoritmos. Mostrar todas as postagens
Mostrando postagens com marcador Algoritmos. Mostrar todas as postagens

O que é PageRank? A História do Algoritmo e o SEO Moderno (Guia)

A Morte do PageRank e a Ascensão do Link Building: O Guia Definitivo do SEO

Continuando nossa série sobre a história do Google e a evolução do SEO moderno, vamos mergulhar em um dos conceitos mais lendários e revolucionários já criados na internet: o famigerado PageRank (PR).

Na nossa aula passada, vimos como o [INSERIR LINK: TEMA - abuso das Meta Tags] quase quebrou a internet. Quando o algoritmo do Google percebeu que as palavras-chave invisíveis eram facilmente manipuláveis, ele precisava de uma métrica mais inteligente para avaliar sites. Ele precisava entender quem era a verdadeira "autoridade" na rede.

Embora a barrinha verde clássica do PageRank não exista mais para o público, o conceito matemático por trás dele ainda é o motor invisível do Google. Entender o fluxo de links é obrigatório para quem quer criar e divulgar sites em nossa apostila de HTML.


O que é o PageRank? (A Métrica que Mudou o Mundo)

O PageRank é um algoritmo fundamental do Google que avalia a relevância de uma página da web atribuindo a ela uma nota de 0 a 10. Ele funciona analisando a quantidade e a qualidade dos links que apontam para essa página, tratando cada link recebido como um "voto de confiança" de outros sites.

Assim como a contagem arcaica de links (Link Farms) e a análise de meta tags, o PageRank é um código matemático complexo. Foi batizado com esse nome em homenagem a Larry Page, um dos fundadores do Google.

A genialidade do PageRank foi parar de olhar apenas para "quantos" links um site recebia, e passar a olhar de quem vinham esses links. A avaliação da importância de um site passou a ser feita pelos outros sites da internet.

🛠️ Curiosidade: A Escala Logarítmica

Vale lembrar que o valor do PageRank não é algo linear. Ou seja, se um site tem PR 4, não quer dizer que ele é duas vezes melhor que um de PR 2. O crescimento desse valor é exponencial. Subir de PR 1 para PR 2 é fácil, mas subir de PR 7 para PR 8 exige uma quantidade absurda de links de gigantes da internet.

A Hierarquia Histórica das Notas:

  • PR 0 a 1: Sites novos, começando a indexar.
  • PR 2 a 4: Sites comuns, blogs de nicho com ótima relevância orgânica.
  • PR 5 a 8: Grandes portais e empresas com equipes de redação (ex: UOL, Globo, Baixaki).
  • PR 9 e 10: Raríssimos. Os verdadeiros titãs da web (Nasa, BBC, Facebook, Apple e o próprio Google).

O Comércio Negro: Tráfico e Venda de PageRank

O ser humano é criativo. Tão logo os Webmasters notaram a importância desses "números mágicos" na barrinha do navegador, surgiu um verdadeiro mercado negro de links na internet.

A lógica era simples: os links repassam uma energia invisível, conhecida no jargão do SEO como Link Juice. Um site pequeno que recebesse um link de um portal PR 6 crescia absurdamente rápido, pois o Google via isso como um atestado de extrema qualidade.

Grandes sites passaram a cobrar dinheiro para colocar links em seus rodapés. Coisas absurdas começaram a aparecer nas SERPs (telas de busca): um site de moda hiper-conceituado apontando do nada para um site de apostas ou de receitas culinárias. Faz sentido? Nenhum. Era pura manipulação do algoritmo.

Outra tática malandra era comprar domínios (URLs) expirados que já possuíam um alto PR. Você comprava a URL, limpava o conteúdo antigo e colocava seus produtos lá. O Google ranqueava instantaneamente.


Cansado de "Adivinhar" o Algoritmo do Google?

Para dominar o SEO, você precisa dominar o código-fonte. Nossa apostila completa ensina Front-End de forma definitiva. Sem mensalidades, estude offline e crie sites imbatíveis.

Apostila HTML e CSS Progressivo
"Estava travado tentando entender a diferença entre links normais e nofollow no SEO, essa apostila salvou meus projetos e subiu meu tráfego!" - Carlos, Desenvolvedor Front-End.

A Evolução Prática: O Atributo Nofollow no HTML

Para combater o spam de links e a venda de PageRank, o Google e a comunidade W3C introduziram uma solução direto no código HTML. Criou-se o atributo rel="nofollow" (não siga).

Basicamente, isso avisa ao robô do Google: "Ei, estou linkando para esse site, mas não estou endossando ele nem passando minha autoridade (Link Juice) para ele."

Veja como é simples a aplicação no HTML moderno:

<!-- 1. Link Dofollow Padrão (Passa PageRank e Autoridade) -->
<a href="https://www.w3.org/">Acesse as regras do W3C</a>

<!-- 2. Link Nofollow (Não passa PageRank, usado em comentários e fóruns) -->
<a href="http://site-suspeito.com" rel="nofollow">Clique aqui</a>

<!-- 3. Link Patrocinado Moderno (Usado para anúncios e publis pagas) -->
<a href="https://loja-parceira.com" rel="sponsored">Compre o produto</a>

Se você tem um blog e os usuários deixam links nos comentários, o seu CMS (como WordPress ou Blogger) automaticamente adiciona o rel="nofollow" para proteger sua nota de PageRank de ser sugada por spammers.

⚠️ Atenção de Webmaster: A lição de ouro do SEO moderno continua válida: Nunca compre links exatos para ganhar autoridade. Não compre domínios antigos só por conta da nota. O Google rastreia redes privadas de blogs (PBNs) e pode banir seu site dos resultados permanentemente.

Como Checar o PageRank Hoje? (A Dura Realidade)

Se você leu tutoriais muito antigos (como a versão original deste post de 2013), deve ter visto indicações de sites "Calculadoras de PageRank". Mas vamos atualizar você para a realidade atual:

O Google escondeu o PageRank do público oficialmente em 2016.

Você não consegue mais ver a nota exata do Google. Porém, o mercado de SEO criou suas próprias ferramentas milionárias para simular o PageRank. Hoje, os webmasters utilizam as seguintes métricas de terceiros para avaliar a força de um site:

  • Domain Authority (DA) e Page Authority (PA): Criados pela ferramenta Moz.
  • Domain Rating (DR) e URL Rating (UR): Criados pela ferramenta Ahrefs.

Essas ferramentas escaneiam a web inteira copiando o que o Google faz, calculam quem linka para quem, e te dão uma nota de 0 a 100. É a forma moderna de medir o antigo PageRank.



Perguntas Frequentes (FAQ)

O Google ainda usa o PageRank hoje?

Sim. Embora tenha ocultado a barra de notas do público para evitar a venda de links, os porta-vozes do Google já confirmaram que o conceito base do PageRank continua operando silenciosamente nos algoritmos atuais para definir a relevância nas pesquisas.

Qual a diferença entre Dofollow e Nofollow?

Um link padrão (dofollow) diz ao Google para rastrear o site destino e repassar autoridade (Link Juice). Já o link com a tag HTML `rel="nofollow"` orienta o robô a não repassar autoridade, protegendo seu site contra penalizações por links de baixa qualidade.

Comprar links para melhorar o SEO funciona?

É uma prática de Black Hat altamente arriscada. O algoritmo Penguin do Google detecta padrões não naturais de aquisição de links. Se você for pego, seu site pode despencar nos rankings ou sofrer desindexação completa.


📚 O que estudar a seguir na Jornada Front-End:

Aprender a lógica dos motores de busca é essencial. Para continuar afiando seu código e subindo nas pesquisas, leia as próximas aulas do nosso fluxo:

  • Como estruturar URLs amigáveis com o elemento Anchor (<a>).
  • A anatomia completa da tag de Imagem (<img>) e otimização do atributo alt.
  • Conceitos de Semântica HTML5: Como o Google lê <article> e <section>.

Como Saber Quantos Dias Tem o Mês no PHP (Atual, Passado e Futuro)

Descobrindo o Número de Dias de um Mês no PHP: Do Básico às Técnicas Avançadas

Por que contar os dias de um mês é tão importante?

Uma das grandes utilidades de se trabalhar com datas no back-end é saber quantos dias exatos um determinado mês possui. Pense bem: se você está programando um sistema de assinaturas tipo Netflix, e o cliente assina no dia 31 de janeiro, quando será a próxima cobrança se fevereiro só vai até o dia 28?

Errar esse cálculo significa perder dinheiro ou irritar o usuário. Neste tutorial, vamos te mostrar como o PHP resolve isso de maneira incrivelmente simples, sem que você precise decorar calendários ou escrever dezenas de comandos if/else para descobrir anos bissextos.


Número de Dias do Mês Atual: O parâmetro date('t')

Como pegar o último dia do mês atual?
No PHP, basta utilizar a função date('t'). A letra 't' minúscula é um parâmetro especial de formatação que não retorna uma data, mas sim o número total de dias contidos no mês atual da execução do script (retornando um valor de 28 a 31).

Para deixarmos a informação completa, podemos combinar o date('t') com o date('F'), que como vimos no tutorial de parâmetros da função date(), retorna o nome do mês em inglês.

Veja como é simples montar a frase:


<?php
    echo "Há " . date('t') . " dias no mês de " . date('F');
    // Saída em fevereiro: Há 28 dias no mês de February
?>

Se você preferir exibir o formato numérico (ex: "mês 02") para não ter problemas com o idioma inglês, basta trocar o parâmetro 'F' pelo 'm':


<?php
    echo "Há " . date('t') . " dias no mês " . date('m');
    // Saída: Há 28 dias no mês 02
?>

O Jeito Certo de Escrever em Português (PHP 8+)

Em tutoriais antigos (PHP 7 ou inferior), era muito comum usar as funções setlocale() e strftime() para forçar o idioma do servidor para português. Atenção: essas funções foram descontinuadas no PHP 8.1.

Para gerar a frase "O mês de Fevereiro tem 28 dias" de forma segura nos dias de hoje, usamos a classe IntlDateFormatter. Veja o padrão ouro do mercado:


<?php
    // Instancia o formatador de datas focado apenas em extrair o nome do mês (MMMM)
    $formatadorMes = new IntlDateFormatter('pt_BR', IntlDateFormatter::NONE, IntlDateFormatter::NONE, null, null, 'MMMM');
    
    // Transforma a primeira letra em maiúscula por estética
    $nomeMes = ucfirst($formatadorMes->format(time()));
    
    echo "O mês de " . $nomeMes . " tem " . date('t') . " dias.";
    // Saída: O mês de Fevereiro tem 28 dias.
?>

Construa Lógicas Imbatíveis no Back-end 🧠

"Manipular datas era meu pesadelo. Eu criava dezenas de IFs para calcular os meses. A Apostila me ensinou atalhos e funções nativas do PHP que reduziram meus códigos pela metade!" - Carlos T., Desenvolvedor PHP.

Saber a sintaxe é fácil; dominar a lógica e os truques dos veteranos é o que separa um júnior de um programador sênior. Conheça nossa Apostila Oficial de PHP Progressivo. O material definitivo para quem quer aprender Orientação a Objetos, banco de dados e sistemas robustos sem enrolação.

📥 Baixar Apostila PHP Progressivo Agora

Número de Dias de QUALQUER Mês: O Truque Sênior da mktime()

Certo, o date('t') funciona perfeitamente para o mês em que estamos. Mas e se você precisar saber quantos dias teve fevereiro de 1988?

Para cálculos viajando no tempo, podemos resgatar nossa querida função mktime(). Relembrando a sintaxe dela:

mktime($hora, $minuto, $segundo, $mes, $dia, $ano);

Existe um truque lógico espetacular aqui. Se você pedir ao PHP para calcular o dia 0 do mês 3 (Março), o motor do PHP entra em curto-circuito lógico? Não! Ele é inteligente. Ele entende que o "dia 0" de um mês é, na verdade, o último dia do mês anterior!

Assim, o dia 0 do mês 3 (Março) de 1988 é o último dia do mês 2 (Fevereiro) de 1988.


<?php
    // Extraindo o dia ('d') do Timestamp gerado no dia 0 de Março (mês 3) de 1988
    $ultimo_dia = date('d', mktime(0, 0, 0, 3, 0, 1988));
    
    echo "Fevereiro de 1988 teve " . $ultimo_dia . " dias.";
    // Saída: Fevereiro de 1988 teve 29 dias. (Foi um ano bissexto!)
?>

Prontinho! A variável $ultimo_dia sempre guardará a exata quantidade de dias daquele mês específico, validando automaticamente os anos bissextos (quando fevereiro recebe 29 dias). É uma sacada genial de programação!


A Alternativa Nativa: cal_days_in_month()

Se você achou o truque da mktime() muito "hacker" e quer deixar o seu código mais legível para outros programadores que lerem o seu sistema no futuro, o PHP possui uma função nativa criada exclusivamente para contar os dias de um mês num calendário.

O nome dela é bastante sugestivo: cal_days_in_month().


<?php
    // Parâmetros: (TIPO DE CALENDÁRIO, MÊS, ANO)
    $dias_fev_1988 = cal_days_in_month(CAL_GREGORIAN, 2, 1988);
    
    echo "Usando a função nativa: " . $dias_fev_1988 . " dias.";
?>
💡 Dica Rápida: A constante CAL_GREGORIAN indica que estamos usando o Calendário Gregoriano, que é o padrão oficial usado no Brasil, em Portugal e em quase todo o ocidente hoje.

Consolide seu Conhecimento (O que estudar a seguir)

Dominar o fluxo do tempo no back-end evita dores de cabeça incalculáveis no futuro. Siga em frente na nossa apostila online com estes guias:


Perguntas Frequentes (FAQ) da Comunidade

O comando date('t') entende se o ano atual é bissexto automaticamente?

Sim, absolutamente. O motor do PHP embute cálculos astronômicos precisos baseados no sistema operacional. Se você executar um script com echo date('t'); no mês de Fevereiro de um ano bissexto (como 2024 ou 2028), ele retornará automaticamente o número 29.

Qual abordagem tem a melhor performance: date('t') ou cal_days_in_month()?

Para o mês atual, a função date('t') é microscopicamente mais rápida porque não exige a injeção de 3 parâmetros, lendo direto do Timestamp ativo. No entanto, para pesquisar meses passados ou futuros, cal_days_in_month() é muito mais limpa e gasta menos processamento do que calcular o "dia 0" via mktime(). Na prática diária corporativa, essa diferença de milissegundos é imperceptível. Use o que deixar o código mais legível para a sua equipe.

O que é Unix Timestamp e Como Usar a Função mktime() no PHP

Entendendo a Unix Timestamp e Cálculos Temporais com a Função mktime() no PHP

O Desafio Matemático do Tempo no Desenvolvimento de Software

Imagine que você recebeu uma demanda crítica de negócio: construir um motor de cálculo para um sistema de seguros onde o usuário digita duas datas e horários completamente distintos, e seu script precisa determinar o intervalo exato de segundos, minutos ou dias entre esses dois eventos. Por exemplo:

  • Evento A: 05 de Abril de 2015 às 18h45min e 34s
  • Evento B: 04 de Novembro de 1987 às 19h00min e 12s

Tentar calcular essa diferença considerando as nuances do calendário gregoriano — como meses com 30 ou 31 dias, anos bissextos e fusos horários — puramente com estruturas condicionais (if/else) seria uma tarefa insana, propensa a falhas de arredondamento e pesadíssima para o processamento do servidor.

Para solucionar essa complexidade de forma universal, a engenharia de software adotou um padrão matemático elegante: converter qualquer momento da história da humanidade em uma linha contínua de números inteiros. É aqui que entra a famosa Unix Timestamp.


O que é a Unix Timestamp? (A Marca Temporal Universal)

O que é Unix Timestamp?
A Unix Timestamp (ou carimbo de data/hora Unix) é um sistema para rastrear o tempo que contabiliza o número total de segundos transcorridos desde a Era Unix (Epoch), definida universalmente como o dia 1 de janeiro de 1970 às 00:00:00 UTC. Instantes anteriores a essa data são representados por números negativos.

Ao transformarmos datas complexas em números inteiros simples, encontrar a diferença entre dois momentos históricos resume-se a uma operação aritmética elementar: uma subtração. Se você sabe quantos segundos se passaram de 1970 até o Evento A, e quantos segundos se passaram até o Evento B, basta subtrair um número do outro para obter a distância exata entre eles.


Calculando Segundos na Engine com a Função mktime()

O PHP possui um método nativo perfeito para ler dados humanos estruturados e traduzi-los instantaneamente para a Unix Timestamp correspondente: a função mktime().

A Assinatura e a Armadilha dos Parâmetros

A assinatura de tipos estruturada na engine do PHP exige atenção estrita à ordem dos argumentos recebidos:

int mktime(int $hour, ?int $minute = null, ?int $second = null, ?int $month = null, ?int $day = null, ?int $year = null)

⚠️ Alerta de Bug em Produção: Note que a assinatura inverte a percepção convencional brasileira. Ela exige primeiro o bloco de horário completo (Hora, Minuto, Segundo) e, em seguida, o bloco de calendário na ordem americana (Mês, Dia, Ano). Trocar a posição do mês pelo dia quebrará silenciosamente a regra de negócio do seu sistema!

Exemplos de Retorno Prático:

  • mktime(18, 45, 34, 4, 5, 2015) ➡️ Retorna o inteiro: 1428270334
  • mktime(19, 0, 12, 11, 4, 1987) ➡️ Retorna o inteiro: 563058012

Subtraindo os dois inteiros gerados (1428270334 - 563058012), descobrimos instantaneamente que existem exatamente 865.212.322 segundos de distância entre os dois eventos.

Escreva Códigos Profissionais sem Depender de Buscas Fragmentadas 🎓

"Eu não entendia o comportamento estranho das datas no servidor até ler o capítulo sobre Timestamp na apostila. O conteúdo limpo e sem anúncios me salvou semanas de retrabalho." - Carlos T., Engenheiro de Software.

Entender funções isoladas na internet resolve problemas imediatos, mas não constrói uma carreira sólida de arquitetura de software. Adquira a nossa Apostila Oficial de PHP Progressivo: estude em um material didático linear, livre de distrações, com centenas de exercícios práticos revisados e voltados para a segurança do mercado real de desenvolvimento.

📥 Baixar Apostila PHP Progressivo em PDF
Capa digital da Apostila PHP Progressivo com fundo transparente

Refatoração Segura do Script de Captura (PHP 8.x+)

Para evitar erros de processamento e impedir que o interpretador dispare Notices de índices indefinidos no servidor de produção, reestruturamos o script utilizando a captura segura por meio do operador de coalescência nula (??) associada à coerção forçada para inteiros ((int)).


<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Cálculo de Timestamp Universal - PHP Progressivo</title>
</head>
<body>

    <h2>Calculadora de Segundos Transcorridos</h2>
    <form action="" method="get">
        <label>Dia: <input type="number" name="day" min="1" max="31" required /></label><br><br>
        <label>Mês: <input type="number" name="month" min="1" max="12" required /></label><br><br>
        <label>Ano: <input type="number" name="year" required /></label><br><br>
        <label>Hora: <input type="number" name="hour" min="0" max="23" required /></label><br><br>
        <label>Minuto: <input type="number" name="min" min="0" max="59" required /></label><br><br>
        <label>Segundo: <input type="number" name="sec" min="0" max="59" required /></label><br><br>
        <input type="submit" name="submit" value="Calcular Timestamp" />
    </form> 

<?php
if (isset($_GET['submit'])) {
    // Sanitização e tipagem explícita dos inputs recebidos do cliente
    $dia     = (int)($_GET['day'] ?? 1);
    $mes     = (int)($_GET['month'] ?? 1);
    $ano     = (int)($_GET['year'] ?? 1970);
    $hora    = (int)($_GET['hour'] ?? 0);
    $minuto  = (int)($_GET['min'] ?? 0);
    $segundo = (int)($_GET['sec'] ?? 0);
    
    // Invocando a lógica matemática respeitando a ordem H, I, S, M, D, Y
    $timestampGerada = mktime($hora, $minuto, $segundo, $mes, $dia, $ano);
    
    if ($timestampGerada !== false) {
        echo "<div style='margin-top:20px; padding:15px; background:#f0fdf4; border:1px solid #bbf7d0; color:#166534; border-radius:4px;'>";
        echo "Resultado Lógico:<br>";
        echo "Data informada: {$dia}/{$mes}/{$ano} às {$hora}:{$minuto}:{$segundo}<br>";
        echo "Unix Timestamp: <code>{$timestampGerada}</code> segundos transcorridos desde 01/01/1970.";
        echo "</div>";
    } else {
        echo "<p style='color:red;'>Erro ao tentar computar a marca temporal.</p>";
    }
}
?>

</body>
</html>

⚙️ Simulador de Escopo Temporal em Tempo Real

Utilize a nossa ferramenta de testes abaixo para simular o comportamento exato da função do servidor. Digite qualquer data histórica e veja os segundos sendo gerados imediatamente:

Conversor de Calendário Humano para Timestamp

⚡ O Paradoxo do Ano 2038 (Y2K38 Bug)
Atenção em arquiteturas legadas: sistemas operacionais ou servidores configurados em ambientes de 32 bits armazenam números inteiros usando um limite que se esgota no dia 19 de janeiro de 2038. Após esse milissegundo, a contagem estoura para números negativos, quebrando sistemas bancários e e-commerces antigos. Para blindar seu código contra isso, certifique-se de hospedar suas aplicações em servidores modernos de 64 bits ou faça a transição completa dos tratamentos temporais utilizando a classe de objetos nativos DateTime().

Torne-se um Arquiteto de Software de Elite 🛠️

O mercado internacional e as principais posições de tecnologia não absorvem profissionais que dominam apenas lógicas de exibição visual. Para conquistar salários acima da média, você deve dominar a engenharia por trás do código: segurança em banco de dados, saneamento e criptografia. Conquiste o nosso Mega Pack Completo com 7 Manuais Premium da Área de TI e domine o cenário corporativo!

Mega Pack completo do Projeto Progressivo contendo apostilas de PHP, Java, C e Front-end

Consolide seu Conhecimento (O que estudar a seguir)

Dominar os fundamentos aritméticos das marcas temporais é a base essencial para construir aplicações seguras e escaláveis. Continue avançando em sua trilha de desenvolvimento:

  • Formatação Avançada: Agora que você compreende como gerar marcas temporais universais, descubra os infinitos tokens de formatação visual lendo nosso guia de Como Exibir e Formatar Datas com a Função date().
  • Documentação Técnica: Conheça comportamentos adicionais para parâmetros ausentes visitando a Documentação Oficial de mktime no ecossistema PHP.net.
  • Segurança Lógica: Avance no gerenciamento e blindagem de dados cruciais aprendendo as diretivas estruturais de Tratamento de Exceções e Blocos Try/Catch.

Perguntas Frequentes (FAQ) da Comunidade

O que acontece se eu passar parâmetros maiores que o limite na função mktime()?

A função mktime() possui um comportamento aritmético chamado de normalização automática. Se você passar o dia como 32 no mês de janeiro, a engine compreenderá inteligentemente que você deseja referenciar o dia 1 de fevereiro. Da mesma forma, passar o valor 0 para o dia fará o PHP retroceder para o último dia do mês anterior.

Qual a diferença real entre as funções time() e mktime() no desenvolvimento?

A função time() não aceita parâmetros e serve exclusivamente para capturar a Unix Timestamp do exato milissegundo atual do relógio do servidor. Já a função mktime() permite que você especifique manualmente dados de uma data arbitrária no passado ou no futuro, servindo como uma ferramenta para agendamentos e cálculos retroativos.

Como Contar a Quantidade de Dígitos de um Número em PHP

Como Contar a Quantidade de Dígitos de um Número em PHP

Neste tutorial do nosso Curso de PHP, vamos resolver a Questão 13 da nossa famosa lista de exercícios de funções. O desafio parece simples, mas esconde vários conceitos importantes de manipulação de dados:

"Faça um programa e uma função que informe a quantidade de dígitos (algarismos) de um determinado número inteiro informado pelo usuário."

1. A Abordagem Web: A Função strlen()

No desenvolvimento Web, quando um usuário digita algo em um formulário HTML (um campo <input>) e envia para o PHP via $_GET ou $_POST, esse dado chega nativamente no formato de String (texto).

Ou seja, se o usuário digitar o ano 2026, o PHP vai enxergar isso como a string "2026". Sendo um texto, a forma mais fácil de contar quantos "caracteres" existem ali é usando a função nativa strlen() (String Length - Comprimento da String):

function tamanhoDigitos($numero){
    return strlen($numero);
}
// echo tamanhoDigitos("2026"); // Retorna 4

2. E se a variável for puramente um Inteiro (Int)?

Se o número não veio de um formulário, mas sim de um cálculo matemático interno do sistema (ex: $n = 150 * 3;), ele será do tipo Integer. A função strlen() espera receber strings. O que fazer?

A solução é forçar a conversão do número para string antes de contar. Chamamos isso de Type Casting. Você pode fazer isso de duas formas simples no PHP:

  • ✅ Usando o comando (string): $texto = (string) $numero;
  • ✅ Concatenando com aspas vazias: $texto = $numero . "";

🛡️ O Perigo dos Números Negativos!

Se o usuário digitar -350, a função strlen("-350") vai retornar 4, pois ela conta o sinal de menos como um caractere! Para corrigir isso, devemos passar o número pela função abs() (Valor Absoluto), que transforma qualquer número negativo em positivo, removendo o sinal.

3. Curiosidade: A Abordagem Lógica/Matemática

Se você estiver prestando um concurso público ou entrevista de emprego, o avaliador pode pedir para você contar os dígitos sem usar funções prontas de texto. Como fazer isso usando apenas a matemática pura?

Basta criar um laço while (enquanto) que divide o número por 10 sucessivamente até ele chegar a zero, contando quantas divisões foram feitas:

function contarComMatematica($n) {
    $n = abs($n); // Remove o sinal negativo
    if ($n == 0) return 1; // O zero tem 1 dígito
    
    $digitos = 0;
    while ($n >= 1) {
        $digitos++;
        $n = $n / 10; // "Corta" o último número
    }
    return $digitos;
}

Para os amantes da matemática avançada, o número de dígitos $d$ de um inteiro $n$ positivo pode ser descoberto instantaneamente usando logaritmos na base 10:

$$d = \lfloor \log_{10}(n) \rfloor + 1$$

No PHP, isso seria escrito como: floor(log10($n)) + 1. Incrível, não é?

O Código Completo (Script Web)

Vamos juntar tudo em uma interface bonita onde o usuário pode testar livremente:

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Contador de Dígitos - PHP</title>
    <style>
        .box { max-width: 400px; margin: 30px auto; text-align: center; font-family: sans-serif; border: 2px solid #94a3b8; border-radius: 8px; padding: 25px; background-color: #f8fafc; }
        input[type="text"] { padding: 12px; width: 80%; margin-bottom: 20px; border: 1px solid #cbd5e1; border-radius: 4px; font-size: 18px; text-align: center; }
        .btn { background-color: #0f172a; color: white; border: none; padding: 12px 25px; border-radius: 4px; cursor: pointer; font-size: 16px; font-weight: bold; width: 88%; }
        .btn:hover { background-color: #334155; }
        .result { margin-top: 20px; padding: 15px; background: #dbeafe; color: #1e3a8a; border-radius: 4px; font-weight: bold; font-size: 1.2em; word-wrap: break-word; }
    </style>
</head>
<body>

    <div class="box">
        <h2>🔢 Contador de Algarismos</h2>
        
        <form action="" method="get">
            <input type="text" name="numero" inputmode="numeric" pattern="-?[0-9]*" required placeholder="Digite um número longo..." />
            <button type="submit" class="btn">Contar Dígitos</button>
        </form>

        <?php
        function contarDigitos($n) {
            $numeroLimpo = preg_replace('/[^0-9]/', '', $n);
            return strlen($numeroLimpo);
        }

        if(isset($_GET['numero']) && $_GET['numero'] !== '') {
            $num_digitado = htmlspecialchars($_GET['numero'], ENT_QUOTES, 'UTF-8');
            $quantidade = contarDigitos($_GET['numero']);
            
            echo "<div class='result'>";
            echo "O número informado possui: <br> <span style='font-size:1.5em; color:#1d4ed8;'>$quantidade dígitos</span>";
            echo "</div>";
        }
        ?>
    </div>

</body>
</html>

🖥️ Teste a Ferramenta em Tempo Real:

Eleve sua Lógica de Programação! 🧠

Entender os bastidores das funções e conseguir resolver problemas de várias maneiras diferentes é o que separa os amadores dos programadores profissionais. Baixe a nossa Apostila Completa de PHP e tenha acesso a centenas de algoritmos e exercícios detalhados!

Baixar Apostila Completa de PHP

13 Exercícios de Funções em PHP: Pratique sua Lógica de Programação

Lista de Exercícios Resolvidos de Funções em PHP

Programação não se aprende apenas lendo, mas sim quebrando a cabeça e escrevendo código! Chegou o momento de testarmos tudo o que você aprendeu sobre criação, invocação e retorno de Funções no PHP.

Abaixo, preparamos uma lista com 13 desafios práticos que vão desde lógicas simples até o uso de funções recursivas avançadas. Tente resolver todos no seu ambiente local antes de olhar as respostas!

💡 Dica de Ouro

Crie um arquivo chamado funcoes.php e coloque todas as funções que você criar lá dentro. Nos arquivos dos exercícios, use o comando include 'funcoes.php';. Isso já te treina para a modularização de sistemas reais!


Lista de Exercícios:

Exercício 01

Escreva um script que pergunta ao usuário se ele deseja converter uma temperatura de grau Celsius para Fahrenheit ou vice-versa. Se ele digitar 1, é de Celsius para Fahrenheit; se digitar 2, é de Fahrenheit para Celsius; se for outro valor, mostre uma mensagem de erro. Para cada conversão, chame a função correta correspondente.

→ Ver Resolução: Conversão Celsius-Fahrenheit

Exercício 02

Faça um programa que contenha uma função que receba três argumentos inteiros e retorne a soma desses três valores. Em seguida, o seu script deve fornecer a média dos três números, através de uma segunda função que invoca a primeira (função chamando função).

Exercício 03

Faça um programa que receba três números do usuário e identifique o maior número através de uma função, e o menor número através de uma outra função separada.

Exercício 04

A probabilidade de dar um valor em um dado comum é de 1/6 (uma em seis). Faça um script em PHP que simule 1 milhão de lançamentos de dados e mostre a frequência que cada número (de 1 a 6) apareceu no final da simulação.

→ Ver Resolução: Lançamento de dados 

Exercício 05

A série de Fibonacci é uma sequência de números onde os dois primeiros são 0 e 1, e o termo seguinte é sempre obtido somando os dois anteriores. Faça um script em PHP que solicite um inteiro positivo ao usuário, que chamaremos de n. Crie uma função recursiva que exiba todos os termos da sequência até o n-ésimo termo.

Exercício 06

Crie uma função que receba um inteiro positivo e teste para saber se ele é primo ou não. Faça um script que recebe um inteiro n do usuário e mostra todos os números primos existentes no intervalo de 1 até n.

Exercício 07

Um número é dito perfeito quando ele é igual à soma de seus fatores divisores. Por exemplo, os fatores de 6 são 1, 2 e 3. Como a soma (1 + 2 + 3) é igual a 6, ele é um número perfeito. Escreva uma função que receba um inteiro e diga se é perfeito ou não. Em outra parte do script, peça um inteiro n e mostre todos os números perfeitos de 1 até n.

→ Ver Resolução: Números perfeitos em PHP

Exercício 08

Use uma função que receba um valor n inteiro e imprima o seguinte padrão numérico na tela (até a n-ésima linha):

1
2   2
3   3   3
.....
n   n   n   n   n   n  ... n
Exercício 09

Use uma função que receba um valor n inteiro e imprima um padrão semelhante ao exercício anterior, mas em formato de escada sequencial:

1
1   2
1   2   3
.....
1   2   3   ...  n
Exercício 10

Faça um programa com uma função que necessite de um argumento. A função deve retornar o caractere 'P' se o seu argumento for positivo, e 'N' se o seu argumento for zero ou negativo.

Exercício 11

Faça um programa com uma função chamada somaImposto(). A função possui dois parâmetros formais: taxaImposto (que é a quantia de imposto sobre vendas expressa em porcentagem) e custo (que é o valor de um item antes do imposto). A função deve alterar e retornar o valor de custo atualizado para incluir o imposto sobre a venda.

Exercício 12

Faça um programa que converta da notação de 24 horas para a notação de 12 horas. Por exemplo, o programa deve converter 14:25 em 2:25 P.M. A entrada é dada em dois inteiros. Deve haver pelo menos duas funções: uma para fazer a conversão e uma para a saída do texto formatado. Registre a informação de período como 'A' para A.M. e 'P' para P.M. Inclua um loop (formulário contínuo) que permita que o usuário repita esse cálculo para novos valores sempre que desejar.

Exercício 13

Faça uma função matemática que informe a quantidade de dígitos de um determinado número inteiro inserido pelo usuário.

→ Ver Resolução: Quantos dígitos tem um número

Gabarito Completo na Apostila 📚

Travou em algum exercício? Não se preocupe! A resolução comentada passo a passo de TODOS esses algoritmos (e dezenas de outros) está disponível na nossa apostila oficial.

Baixar Apostila Completa de PHP

Funções Recursivas no PHP: O Guia Definitivo da Recursividade

Recursividade em PHP: Entenda Funções Recursivas Passo a Passo

Existe uma velha piada entre os programadores que diz: "Para entender a recursividade, você primeiro precisa entender a recursividade". Ao final deste tutorial do nosso Curso de PHP, você vai entender exatamente o que isso significa (e vai rir junto!).

Uma função recursiva é, nada mais, nada menos, do que uma função que invoca (chama) a si mesma de dentro do seu próprio bloco de código. É um conceito lindo, matemático e extremamente poderoso na programação.

⚠️ Cuidado com o Loop Infinito (Stack Overflow)

Obviamente, se você apenas escrever o código da função chamando a si mesma, a função de dentro chamará a si mesma, que chamará a si mesma de novo, infinitamente... até esgotar toda a memória RAM do computador ou do servidor.

Para evitar que isso aconteça, toda função recursiva deve, obrigatoriamente, ter um ponto de parada (Base Case). Isso é feito com um simples if/else. Se a condição de parada for atingida, a função para de se invocar; caso contrário, ela continua.

1. Somatório com Recursão

Seja $F(n)$ uma função matemática que representa o somatório de um número $n$. Ou seja, é a soma de todos os números até ele:

$$F(n) = 1 + 2 + 3 + 4 + \dots + (n-1) + n$$

Por exemplo:
$F(4) = 1 + 2 + 3 + 4 = 10$
$F(5) = 1 + 2 + 3 + 4 + 5 = 15$

Porém, note um padrão interessante na matemática. A soma de 5 é exatamente a soma de 4, mais 5:
$F(5) = (1 + 2 + 3 + 4) + 5 = F(4) + 5$

Isso nos dá a nossa fórmula recursiva universal: $F(n) = n + F(n-1)$

A Lógica: Vamos criar uma função somatorio(). Se o argumento for 1 (nosso ponto de parada), ela retorna 1 e o programa acaba. Se não for 1, ela retorna $n$ mais a chamada da própria função para $n-1$.

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Somatório Recursivo - PHP</title>
</head>
<body style="font-family: Arial; padding: 20px;">

    <form action="" method="get">
        Somatório de: <input type="number" name="numero" required />
        <input type="submit" value="Calcular" />
    </form>

    <?php
    if (isset($_GET['numero'])) {
        $numero = intval($_GET['numero']);
        echo "<br><strong>O somatório de {$numero} é:</strong> " . somatorio($numero);
    }

    // Função Recursiva
    function somatorio($numero) {
        // Ponto de Parada
        if ($numero == 1) {
            return 1;
        } else {
            // Chamada Recursiva
            return $numero + somatorio($numero - 1);
        }
    }
    ?>

</body>
</html>

2. Fatorial com Recursão ($n!$)

O Fatorial segue uma lógica absurdamente parecida com a do somatório, mas multiplicando. (Nós já o calculamos usando Laços de Repetição no passado).

Observe:
$5! = 5 \times 4 \times 3 \times 2 \times 1$
$6! = 6 \times (5 \times 4 \times 3 \times 2 \times 1) = 6 \times 5!$

A nossa fórmula recursiva é: $n! = n \times (n-1)!$

O nosso ponto de parada baseia-se na regra matemática universal de que $0! = 1$. Veja o código:

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Fatorial Recursivo - PHP</title>
</head>
<body style="font-family: Arial; padding: 20px;">

    <form action="" method="get">
        Fatorial de: <input type="number" name="numero" min="0" required />
        <input type="submit" value="Calcular Fatorial" />
    </form>

    <?php
    if (isset($_GET['numero'])) {
        $numero = intval($_GET['numero']);
        echo "<br><strong>O fatorial de {$numero} é:</strong> " . fat($numero);
    }

    // Função Recursiva
    function fat($numero) {
        // Ponto de Parada
        if ($numero == 0) {
            return 1;
        } else {
            // Chamada Recursiva
            return $numero * fat($numero - 1);
        }
    }
    ?>

</body>
</html>

3. Sequência de Fibonacci com Recursão

A famosa série de Fibonacci é um dos exemplos mais clássicos ensinados nas universidades para treinar recursividade. Na matemática da natureza, os primeiros termos são definidos como:

$F(0) = 0$
$F(1) = 1$

A partir daí, cada novo número é a soma dos dois anteriores. A fórmula recursiva é:
$F(n) = F(n-1) + F(n-2)$

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Fibonacci Recursivo - PHP</title>
</head>
<body style="font-family: Arial; padding: 20px;">

    <form action="" method="get">
        Exibir o Termo Fibonacci (N): <input type="number" name="numero" min="0" required />
        <input type="submit" value="Descobrir" />
    </form>

    <?php
    if (isset($_GET['numero'])) {
        $numero = intval($_GET['numero']);
        echo "<br><strong>O termo {$numero} de Fibonacci é:</strong> " . fibo($numero);
    }

    // Função Recursiva
    function fibo($numero) {
        // Pontos de Parada
        if ($numero == 0 || $numero == 1) {
            return $numero;
        } else {
            // Chamada Recursiva Dupla
            return fibo($numero - 1) + fibo($numero - 2);
        }
    }
    ?>

</body>
</html>

Domine Algoritmos no PHP 🧠

Recursividade é apenas o começo! O verdadeiro poder de um desenvolvedor está em conhecer todas as ferramentas da linguagem. Estude com centenas de exercícios práticos, gabaritados e organizados do zero ao avançado.

Baixar Apostila Completa de PHP

Como Criar a Sequência de Fibonacci em PHP: Passo a Passo com Laços

O que você vai aprender neste tutorial

  • O que é a famosa Sequência de Fibonacci e como ela funciona.
  • Como estruturar a lógica de troca de variáveis (atual, último e penúltimo).
  • Como criar um script PHP moderno usando o laço de repetição for para gerar a série dinamicamente a partir da entrada do usuário.

O que é a Sequência de Fibonacci?

A sequência de Fibonacci é uma sucessão numérica infinita onde os dois primeiros termos são 0 e 1, e cada número subsequente é calculado pela soma dos dois números imediatamente anteriores a ele.

Essa é, sem dúvida, uma das questões de lógica de programação mais cobradas em entrevistas de emprego para desenvolvedores juniores. Entender como construí-la usando laços de repetição (como o laço FOR ou WHILE) é um divisor de águas no seu aprendizado de algoritmos.

Vamos visualizar a formação da série na prática:

  • Termo 1 = 0
  • Termo 2 = 1
  • Termo 3 = 1 + 0 = 1
  • Termo 4 = 1 + 1 = 2
  • Termo 5 = 2 + 1 = 3
  • Termo 6 = 3 + 2 = 5
  • ...e assim por diante.

💡 Curiosidade: A série de Fibonacci não vive apenas nos computadores. Ela possui proporções matemáticas fascinantes que aparecem frequentemente na natureza, desde a disposição das pétalas de uma flor até espirais de galáxias. Vale a leitura na Wikipédia sobre a Sequência de Fibonacci.

Como Fazer a Série de Fibonacci com Laços em PHP

Para transformarmos essa matemática em código PHP, precisamos que o usuário nos diga quantos termos ele quer ver. Inicialmente, sempre exibimos o 0 e o 1. Portanto, o usuário precisa digitar um número maior que 2 para a brincadeira fazer sentido.

A Lógica das Variáveis

Nós vamos utilizar três variáveis fundamentais para fazer o script "lembrar" dos números passados:

  • $atual - Vai armazenar o número atual que está sendo calculado.
  • $ultimo - Armazena o último número gerado pela série.
  • $penultimo - Armazena o número que veio antes do último.

O estado inicial delas, antes do laço começar, será:

$ultimo = 1;
$penultimo = 0;

Dentro do nosso laço, a mágica acontece nesta ordem exata:

  1. Calculamos o próximo número: $atual = $ultimo + $penultimo;
  2. Imprimimos o valor de $atual.
  3. O pulo do gato: Atualizamos as variáveis para a próxima rodada do laço. O antigo $ultimo passa a ser o $penultimo, e o $atual recém-calculado vira o novo $ultimo.

A Lógica está travando sua evolução? 🧠

Se você teve que ler a explicação das variáveis duas vezes, não se preocupe, é normal! A melhor forma de fixar algoritmos como o de Fibonacci é treinando offline, sem distrações. Baixe o Mega Pack Projeto Progressivo e tenha acesso vitalício a centenas de exercícios resolvidos passo a passo em PHP, JS, Python e mais.

Ver o Conteúdo do Mega Pack Completo

Código Completo: Gerador de Fibonacci em PHP

Abaixo, temos o código HTML para o formulário e o script PHP atualizado. Utilizamos a função intval() e o operador ?? para garantir que o código seja seguro e não gere erros no seu servidor moderno.

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <title>Gerador de Fibonacci - PHP Progressivo</title>
</head>
<body>
    <h2>Calculadora da Sequência de Fibonacci</h2>
    <form action="" method="get">
        <label for="number">Exibir até qual termo (maior que 2):</label><br>
        <input type="number" name="number" id="number" min="3" required />
        <input type="submit" value="Calcular" />
    </form> 
    <hr>

    <?php 
    // Verifica se o usuário enviou o número pelo formulário
    if (isset($_GET['number'])) {
        // Captura o valor, garantindo que seja um número inteiro seguro
        $n = intval($_GET['number']);
        
        // Verifica se o número atende ao requisito mínimo
        if ($n > 2) {
            $ultimo = 1;
            $penultimo = 0;
            
            echo "<h3>Os primeiros $n termos são:</h3>";
            // Exibe os dois primeiros termos fixos
            echo "0 <br> 1 <br>";
            
            // O laço começa em 1 e vai até $n - 2 (pois já exibimos 2 termos)
            for ($count = 1; $count <= $n - 2; $count++) {
                
                // Regra de negócio do Fibonacci
                $atual = $ultimo + $penultimo;
                echo $atual . "<br>";
                
                // Atualização de variáveis para a próxima iteração
                $penultimo = $ultimo;
                $ultimo = $atual;
            }
        } else {
            echo "<p style='color:red;'>Por favor, insira um número maior que 2.</p>";
        }
    }
    ?>
</body>
</html>

⚠️ Atenção ao detalhe técnico: Nossa variável de controle do for vai de 1 até $n - 2. Subtraímos dois do total justamente porque já imprimimos o 0 e o 1 manualmente fora do laço. Se não fizéssemos isso, a sequência teria dois números a mais do que o usuário pediu!