Do not speak Portuguese? Translate this site with Google or Bing Translator
Dicas de PHP

Posted on: January 29, 2020 12:18 PM

Posted by: Renato

Categories: Variados

Views: 269

1. Utilize os operadores === e !==

Essa muita gente desconhece e pode evitar muito tempo perdido com debug. Algumas funções do PHP retornam tanto um valor booleano como um valor inteiro, principalmente funções que tratam strings. E no caso de você querer verificar se a função retornou false e a mesma retornar 0. Como vocês sabem, 0 e false no PHP, em uma condicinal, significam a mesma coisa. Para esses casos, utilizamos os operadores === e !==. Esses operadores comparativos retornam true apenas quando os valores comparados são iguais e do mesmo tipo.

function validaUrl( $url ) {
    $pos = strpos( $url, 'http://' );
    if( $pos === false ) $url = 'http://' . $url;
    return $url;
}
echo validaUrl( 'www.daviferreira.com' );
echo validaUrl( 'http://www.apple.com' );

2. isset() brincando de strlen()

Aprendi faz pouco tempo, mas já a utilizo bastante. Primeiro porque, para verificar o tamanho de uma string, função isset é aproximadamente cinco vezes mais rápida do que a strlen. E segundo porque, caso a variável não exista, isset ainda funciona enquanto que strlen retornaria um erro.

if( !isset( $senha[5] ) ) {
   echo 'Sua senha deve possuir no mínimo 6 caracteres!';
}

UPDATE: Mais informações nesse link - dica do leitor André Molin.

3. Evitando aquele maldito erro dos Ifs

Sabe quando você esquece um sinal de igual usando if. Por exemplo: if( x = 1 ). Este exemplo retornaria sempre true e o PHP não acusaria nenhum erro. Existe uma maneira fácil de resolver isso, simplesmente mudar a variável de posição, como no exemplo abaixo. Neste caso, um if( 1 = x )resultaria em erro.

if ( 5 == $area ) {
   echo 'Você está no menu 5.';
}

4. Zeros à esquerda (e à direita também!)

Utilizo muito essa dica em sistemas de cadastro de produtos, com códigos internos da loja. Geralmente o cliente pede para preencher o número com zeros ou algum outro caractere somente para impressão. A função str_pad faz isso pra gente. Ela recebe quatro parâmetros: a string a ser preenchida, o número de espaços a serem preenchidos, o caractere utilizado no preenchimento e a posição (LEFT, RIGHT ou BOTH - esquerda, direita ou ambos). No caso do número de espaços ser menor do que o tamanho da string, a função não faz nada.

echo str_pad( '9', 10, '0', STR_PAD_LEFT ); // 0000000009

5. Com vocês, a função list()

Ah, não sei porque vivo esquecendo esta função! Talvez porque a maneira como é chamada seja pouco intuitiva. A falta de padrão no PHP é irritante às vezes (strpos e str_pad, por exemplo). Enfim, o que ela faz é pegar os valores de um array e criar variáveis com eles.

$localizacao = array( 'Brasil', 'RJ', 'Rio de Janeiro', 'Centro' );
$list( $pais, $estado, $cidade, $bairro ) = $localizacao;

// índices não-numéricos
$bd_config = array();
$bd_config['usuario'] = 'root';
$bd_config['senha'] = 'root';
$bd_config['banco'] = 'teste';
list( $usuario, $senha, $banco ) = array_values( $bd_config );

6. Esqueça (de vez) o ‘?>’ no final dos arquivos

É isso mesmo! O “?>” no final dos arquivos PHP é desnecessário. E você deveria parar de utilizá-lo. Utilizando o fechamento, qualquer espaço em branco ou caractere estranho poderá gerar um erro no browser, no conteúdo exibido. Sem o fechamento seria retornado um erro pelo parser do PHP.

7. Métodos em cadeia

Desde o lançamento da versão 5 do PHP com melhorias na orientação a objetos é possível encadear métodos de uma classe. Para funcionar, essa dica necessita que seu método retorne um objeto. No exemplo abaixo, através do encadeamento de métodos o sistema valida o login de um usuário.

class usuarios {
  var $email;
  var $senha;
  var $erro;

  function __construct( $email, $senha ) {
    $this->email = $email;
    $this->senha = $senha;
    $this->erro  = NULL;
  }

  function criticaDados() {
    if( !$this->email ) $this->erro ='E-mail inválido';
    elseif( !isset( $this->senha[6] ) ) $this->erro = 'Senha inválida';
    return $this;
  }

  function login() {
    if( is_null( $this->erro ) ) {
      return true;
    } else {
      return $this->erro;
    }
  }

}
$oUsuario->criticaDados()->login();

8. Par ou ímpar?

Tá bom, pode ser boba, mas em alguns casos é muito útil. O operador matemático % retorna o resto de uma divisão, portanto, podemos utilizá-lo para descobrir se um número é par ou ímpar. No exemplo abaixo, é gerada uma lista HTML alternando a classe dos ítens.

$count = 1;
for( $i = 0; $i < = 10; $i++ ) {
    if( $count%2 ) {
        $classe = 'normal';
    } else {
        $classe = 'alt';
    }
    echo '<li class="' , $classe, '">teste</li>"';
    $count++;
}

9. echo ‘Olá’, ‘Mundo’;

Além de ficar mais bonito esteticamente, esse método pouco utilizado de concatenamento da função echo é tambem mais rápido em termos de performance do que o tradicional concatenamento com pontos.

    echo '<table class="resultado">',
             '<tr>',
             '<td>' . $cidade. '</td>',
             '<td>' . $estado . '</td>',
             '<td>' . $pais . '</td>',
             '</tr>',
             '</table>';

10. Ordenando arrays por um índice

O PHP possui algumas funções nativas para ordenamento de arrays simples, mas e se for preciso ordenar por um índice específico em um array um pouquinho mais complexo? Pra esses casos existe a função usort. O que ela faz é ordenar um vetor utilizando uma função comparativa personalizada. Por exemplo, supondo que temos um array de um ranking, que registra o nome e os pontos dos competidores. Pra ordenar pelo índice ‘pontos’, basta criar uma função para comparar os valores de dois cadastros diferentes e passá-la como parâmetro da função usort (note que o nome é passado como string).

function ordenaPontos( $a, $b ) {
    if ( $a['pontos'] == $b['pontos'] ) {
        return 0;
    }
    return ( $a['pontos'] < $b['pontos'] ) ? -1 : 1;
}
$ranking = array(
    0 => array( 'nome' => 'Davi', 'pontos' => 2 ),
    1 => array( 'nome' => 'Letícia', 'pontos' => 4 ),
    2 => array( 'nome' => 'Francisco', 'pontos' => 1 ),
    3 => array( 'nome' => 'Cecília', 'pontos' => 3 ),
)
usort( $ranking, 'ordenaPontos' );

No exemplo acima, preste atenção em uma outra pequena dica: eu sempre costumo deixar uma vírgula no último índice do array. Isso evita esquecê-la quando é adicionado um novo registro.

11. Substituindo a primeira ocorrência de uma string

As funções de substituição de strings, normais ou com expressões regulares, todo mundo conhece. Mas e se quisermos substituir apenas a primeira ocorrência de um determinado termo? A função preg_replace possui um quarto parâmetro que resolve esse problema. Ele funciona como um contador e irá substituir, como limite máximo, o valor especificado. (Ainda existe um quinto parâmetro, uma variável para armazenar a quantidade de termos substituídos)

$string = 'teste string de teste';
echo preg_replace( '/teste/', 'teste2', $string, 1 ); // 'teste2 string de teste'

Essas foram minhas 11 dicas de PHP.


0

Share

Donate to Site


About Author

Renato

Developer

Add a Comment
Comments 0 Comments

No comments yet! Be the first to comment

Blog Search


Categories

OUTROS (15) Variados (109) PHP (130) Laravel (157) Black Hat (3) front-end (28) linux (113) postgresql (39) Docker (26) rest (5) soap (1) webservice (6) October (1) CMS (2) node (7) backend (13) ubuntu (54) devops (25) nodejs (5) npm (2) nvm (1) git (8) firefox (1) react (6) reactnative (5) collections (1) javascript (6) reactjs (7) yarn (0) adb (1) Solid (2) blade (3) models (1) controllers (0) log (1) html (2) hardware (3) aws (14) Transcribe (2) transcription (1) google (4) ibm (1) nuance (1) PHP Swoole (5) mysql (31) macox (4) flutter (1) symfony (1) cor (1) colors (2) homeOffice (2) jobs (3) imagick (2) ec2 (1) sw (1) websocket (1) markdown (1) ckeditor (1) tecnologia (14) faceapp (1) eloquent (14) query (4) sql (40) ddd (3) nginx (9) apache (4) certbot (1) lets-encrypt (3) debian (11) liquid (1) magento (2) ruby (1) LETSENCRYPT (1) Fibonacci (1) wine (1) transaction (1) pendrive (1) boot (1) usb (1) prf (1) policia (2) federal (1) lucena (1) mongodb (4) paypal (1) payment (1) zend (1) vim (4) ciencia (6) js (1) nosql (1) java (1) JasperReports (1) phpjasper (1) covid19 (1) saude (1) athena (1) cinnamon (1) phpunit (2) binaural (1) mysqli (3) database (42) windows (6) vala (1) json (2) oracle (1) mariadb (4) dev (12) webdev (24) s3 (4) storage (1) kitematic (1) gnome (2) web (2) intel (3) piada (1) cron (2) dba (18) lumen (1) ffmpeg (2) android (2) aplicativo (1) fedora (2) shell (4) bash (3) script (3) lider (1) htm (1) csv (1) dropbox (1) db (3) combustivel (2) haru (1) presenter (1) gasolina (1) MeioAmbiente (1) Grunt (1) biologia (1) programming (22) performance (3) brain (1) smartphones (1) telefonia (1) privacidade (1) opensource (3) microg (1) iode (1) ssh (3) zsh (2) terminal (3) dracula (1) spaceship (1) mac (2) idiomas (1) laptop (2) developer (37) api (4) data (1) matematica (1) seguranca (2) 100DaysOfCode (9) hotfix (1) documentation (1) laravelphp (10) RabbitMQ (1) Elasticsearch (1) redis (2) Raspberry (4) Padrao de design (4) JQuery (1) angularjs (4) Dicas (40) Kubernetes (2) vscode (2) backup (1) angular (3) servers (2) pipelines (1) AppSec (1) DevSecOps (4) rust (1) RustLang (1) Mozilla (1) algoritimo (1) sqlite (1) Passport (1) jwt (4) security (2) translate (1) kube (1) iot (1) politica (2) bolsonaro (1) flow (1) podcast (1) Brasil (1) containers (2) traefik (1) networking (1) host (1) POO (2) microservices (2) bug (1) cqrs (1) arquitetura (2) Architecture (3) sail (3) militar (1) artigo (1) economia (1) forcas armadas (1) ffaa (1) autenticacao (1) autorizacao (2) authentication (4) authorization (2) NoCookies (1) wsl (4) memcached (1) macos (2) unix (2) kali-linux (1) linux-tools (5) apple (1) noticias (2) composer (1) rancher (1) k8s (1) escopos (1) orm (1) jenkins (4) github (5) gitlab (3) queue (1) Passwordless (1) sonarqube (1) phpswoole (1) laraveloctane (1) Swoole (1) Swoole (1) octane (1) Structurizr (1) Diagramas (1) c4 (1) c4-models (1) compactar (1) compression (1) messaging (1) restfull (1) eventdrive (1) services (1) http (1) Monolith (1) microservice (1) historia (1) educacao (1) cavalotroia (1) OOD (0) odd (1) chatgpt (1) openai (3) vicuna (1) llama (1) gpt (1) transformers (1) pytorch (1) tensorflow (1) akitando (1) ia (1) nvidia (1) agi (1) guard (1) multiple_authen (2) rpi (1) auth (1) auth (1) livros (2) ElonMusk (2) Oh My Zsh (1) Manjaro (1) BigLinux (2) ArchLinux (1) Migration (1) Error (1) Monitor (1) Filament (1) LaravelFilament (1) replication (1) phpfpm (1) cache (1) vpn (1) l2tp (1) zorin-os (1) optimization (1) scheduling (1) monitoring (2) linkedin (1) community (1) inteligencia-artificial (2) wsl2 (1) maps (1) API_KEY_GOOGLE_MAPS (1) repmgr (1) altadisponibilidade (1) banco (1) modelagemdedados (1) inteligenciadedados (4) governancadedados (1) bancodedados (2) Observability (1) picpay (1) ecommerce (1) Curisidades (1) Samurai (1)

New Articles



Get Latest Updates by Email