quarta-feira, 21 de março de 2012

Arrays Associativos

     Uma característica bem interessante dos arrays em PHP é a capacidade de fazer associações.
     Quando nos referimos a associações, queremos dizer que, ao invés de usarmos números como índices, podemos usar strings (nomes). Dessa forma, fica muito mais simples e intuitivo obter um valor de um array, pois nomes fazem mais sentido do que números.
     Para usarmos o array associativo basta apenas substituir o número do índice por uma string. Veja o exemplo abaixo:
<?php
  $doc = array();
  $doc['rg'] = "00.000.000-X";
  $doc['cpf'] = "000.000.000-00";
  $doc['cartao de credito'] = 12345;
?>

     Caso queiramos inicializar o array diretamente usando associações, devemos usar seta larga para vincular um valor a uma chave.
     A seta larga é composta pelo sinal de igual mais o sinal de maior (=>). Veja o mesmo código usando as setas largas diretamente na associação.
<?php
  $doc = array("rg" => "00.000.00-X",
               "cpf" => "000.000.000-00",
               "cartao de credito" => 12345);
?>

     Para acessar os valores do array associativo, segue o mesmo padrão.
<?php
  $doc = array("rg" => "00.000.00-X",
               "cpf" => "000.000.000-00",
               "cartao de credito" => 12345);
  echo ("Os documentos de Fulano são:" .
        "<BR>RG: ". $doc['rg'] .
        "<BR>CPF: ". $doc['cpf'] .
        "<BR>Cartão de Crédito: ". $doc['cartao de credito']);
?>

Matéria baseada em: 
Acessado em: 21/03/2012

quarta-feira, 14 de março de 2012

Criptografia no PHP



Existem dois tipos de criptografias: 

  • criptografias de “mão unica” ou one-way: com esse tipo de criptografia pode-se apenas codificar o texto.. Não tem como, baseado no texto já codificado, descobrir o texto original. 

  • Criptografia de "mão dupla", o que possibilita a criação de duas funções: uma para codificar e outra para decodificar o texto.

MD5

MD5 é a mais comum, é um algoritmo de hash de 128 bits.
O md5 gera uma string alfa-numérica de 32 caracteres, não importa se você está gerando o md5 de duas letras ou de um texto de 20 parágrafos… O md5 gerado sempre vai ter 32 caracteres.
Você pode usar o md5 na hora de salvar um dado sigiloso (senhas) no banco de dados. Por ser um criptografia de mão única, ninguém tem acesso à senha original.
Pra usar o md5 no PHP é só usar da seguinte forma:
$string = 'O rato reu a ropa do rei de Roma';
$codificada = md5($string);
echo "Resultado da codificação usando md5: " . $codificada;
// 54cf74d1acdb4037ab956c269b63c8ac

SHA1

A outra criptografia de mão única é o sha1. Ela é praticamente identica ao md5, só que tem 160 bits, o que acaba criando uma string de resultado maior: 40 caracteres alfa-numéricos. Outro ponto do sha1 é que, por ser 160 bits e gerar uma cadeia de caracteres maior, uma colisão (encontrar duas strings que, criptografadas, sejam a mesma coisa) é bem mais rara que numa chave de 128bits.
Usar o sha1 no PHP é exatamente a mesma coisa que o md5, só que mudando o nome da função:
$string = 'O rato reu a ropa do rei de Roma';
$codificada = sha1($string);
echo "Resultado da codificação usando sha1: " . $codificada;
// b186b709f7cf5a1d98d413379a66e511df8d59a4

BASE64

A criptografia  base64 é um método para codificação dos dados para transferência na Internet. Ela é uma codificação de mão dupla, e usando uma segunda função você pode descobrir a string original de uma string codificada.
Para usar ela no PHP você tem as duas formas:
$string = 'O rato reu a ropa do rei de Roma';
$codificada = base64_encode($string);
echo "Resultado da codificação usando base64: " . $codificada;
// TyByYXRvIHJldSBhIHJvcGEgZG8gcmVpIGRlIFJvbWE=
echo "<br /><br />";
$original = base64_decode($codificada);
echo "Resultado da decodificação usando base64: " . $original;
// O rato reu a ropa do rei de Roma
// Note que $original vai ser idêntica a $string


Matéria baseada em: 
Acessado em: 14/03/2012

Frameworks



O que é um Framework?
     Framework  é uma abstração que une códigos comuns entre vários projetos de software provendo uma funcionalidade genérica. Um framework pode atingir uma funcionalidade específica, por configuração, durante a programação de uma aplicação. Ao contrário das bibliotecas, é o framework quem dita o fluxo de controle da aplicação, chamado de Inversão de Controle. 

     Especificamente em orientação a objetos, framework é um conjunto de classes com objetivo de reutilização de arquitetura de software, provendo um guia para uma solução em um domínio específico de software. Framework se diferencia de uma simples biblioteca, pois esta se concentra apenas em oferecer implementação de funcionalidades, sem definir a reutilização de uma solução de arquitetura.

Principais Frameworks PHP:
  • Symfony:
     O Symfony é um framework que fornece uma arquitetura, componentes e ferramentas para os desenvolvedores construírem aplicações web mais complexas. Utiliza boas práticas de desenvolvimento web e integra grandes bibliotecas de terceiros.

  • CakePHP:
     O framework CakePHP provê uma base robusta para uma aplicação. Ele pode manipular cada aspecto, desde a requisição inicial do cliente até o ponto final da renderização da página.

  • Zend Framework:
     O Zend Framework oferece uma aplicação robusta, uma abstração de banco de dados que é simples de usar e um componente que implementa formas de HTML, validação e filtragem para que desenvolvedores possam consolidar todas essas operações. 

Vantagens dos Frameworks:
     Algumas das vantagens dos frameworks são: maior facilidade para a detecção de erros, por serem peças mais concisas de software; concentração na abstração de soluções do problema que estamos tratando; eficiência na resolução dos problemas e otimização de recursos. 

Matéria baseada em: 
Acessado em: 14/03/2012


quarta-feira, 7 de março de 2012

Sobrecarga de métodos - PHP OO


O que é sobrecarga?
Sobrecarga é um dos fundamentos da programação orientada à objetos e significa que um elemento pode realizar vários métodos/funções com o mesmo nome.
Como Utilizar?
O PHP por ser uma linguagem de natureza dinâmica e tipagem fraca, não permite uma implementação "nativa" de sobrecarga, porém é possível utilizando alguns métodos que auxiliam a sua criação.
Os métodos são: "func_get_arg", "func_get_args", "func_num_args".
nc_get_arg
Esta função permite que você recupere o valor de um argumento passado como parâmetro na chamada do método.
public function sobrecarga() {
    return $argumento = func_get_arg(0);
}

func_get_args

Esta função retorna um vetor com todos os argumentos passados como parâmetro na chamada do método.
public function sobrecarga() {
    var_dump(func_get_args());
}

func_num_args

Esta função retorna um inteiro que representa a quantidade de argumentos passados como parâmetro ao seu método.
public function sobrecarga() {
    return $quantidade = func_num_args();
}

Como Utilizar?

Agora que já apresentamos as funções que serão utilizadas, veremos como se implementa a sobrecarga no PHP.
A sobrecarga que irei mostrar será de dois tipos: sobrecarga por quantidade de parâmetros e sobrecarga por tipo de parâmetros.

Sobrecarga por quantidade

Para implementar este tipo de sobrecarga, basta escrever um método (sem argumentos) e na implementação deste método o método func_num_args será chamado para verificarmos com quantos parâmetros estamos trabalhando.

class Sobrecarga {
    public function sobrecargaUm() {
        if (func_num_args() == 2) {
            $this->_metodoChamadoComDoisArgumenos(
                func_get_arg(0), func_get_arg(1)
            );
        } else if (func_num_args() == 3) {
            $this->_metodoChamadoComTresArgumentos(
                func_get_arg(0), func_get_arg(1), func_get_arg(2)
            );
        } else {
            throw new Exception("Número de argumentos inválido");
        }
    }
}
$sobrecarga = new Sobrecarga();
$sobrecarga->sobrecargaUm("Hello","World");
$sobrecarga->sobrecargaUm("Hello","World", "Again");

Sobrecarga por tipo

Para implementar este tipo de sobrecarga basta recuperar os argumentos passados por parâmetros e testar o tipo de cada um deles.
class Sobrecarga {
    public function sobrecargaDois() {
        if (func_num_args() == 1) {
            if (is_numeric(func_get_arg(0)) {
                $this->_metodoSeArgumentoNumerico(func_get_arg(0));
            } else {
                $this->_metodoSeArgumentoString(func_get_arg(0));
            }
        } else {
            throw new Exception("Número de argumentos inválido");
        }
    }
}
$sobrecarga = new Sobrecarga();
$sobrecarga->sobrecargaDois("Hello");
$sobrecarga->sobrecargaDois(21);

Matéria baseada em: 
Acessado em: 07/03/2012