TUTORIAL DE PHP ESTRUTURADO
Este tutorial teve como principal fonte de informações o manual oficial do PHP.
1 - INTRODUÇÃO
O Que é PHP?
É uma linguagem de script, Open Source, de uso geral, no lado do servidor, embutível no HTML e especialmente voltada para o desenvolvimento Web. Originalmente chamou-se PHP (Personal Home Page) mas depois teve seu nome alterado pela comunidade para PHP: Hypertext Processor, um acrônimo recursivo.
Um pequeno script em PHP
<?php
echo "Script em PHP!";
?>
Em março/2006 ele já está presente em mais de 20 milhões de domínios ao redor do planeta (http://www.php.net/usage.php).
Estatísticas sobre o PHP:
http://www.nexen.net/chiffres_cles/phpversion/php_statistics_for_april_2006.php
História do PHP
- Criado em 1995 por Rasmus Lerdorf, na forma de scripts Perl para coletar estatísticas online de seu currículo. Com um interpretador em C e comunicação com SGBDs.
- Versão 2 aparece em novembro de 1997, quando recebe seu nome inicial e é enriquecido com um interpretador de formulários (FI) - PHP/FI. Teve seu código fonte disponibilizado para a comunidade. Contava com 50.000 domínios que o utilizavam (em torno de 1% dos existentes na época).
- Versão 3 sai em seguida, logo em julho de 1998. Similar ao PHP atual, esta versão foi totalmente reescrita por Andi Gutmans e Zeev Suraski, programadores israelenses. Inicia o suporte à orientação a objetos e a sua extensibilidade, que atraiu muitos programadores. Rebatizado de PHP: Hypertext Processor. Já estava presente em 10% dos servidores web da Internet.
- Versão 4 sai em maio de 2000. Melhora de performance, suporte a muitos servidores web, a session, entre outros. Já está presente em 20% dos domínios da Internet.
- Versão 5 sai em julho de 2004. Seu foco principal é a orientação a objetos, que corrije deficiências e traz novos e amplos recursos para a orientação a objetos.
Delimitadores do PHP
Para que o interpretador reconheça quando tem que interpretar o script em PHP e quando não, usa-se delimitadores para que quando os encontre ele interprete corretamente. Quando ele encontra o delimitador <?php ele começa a processar como PHP e quando encontra ?> ele pára de processar e tudo o mais envia para o browser como está. Existem outros tipos de delimitadores do PHP mas estes <?php ... ?> são os recomendados, por serem os mais abrangentes e terem suporte inclusive a XML.
Forças do PHP
- Sua simplicitade é muito importante para o programador que se inicia no PHP.
- Seus recursos atendem ao programador experiente.
- Sua documentação rica em conteúdo e exemplos facilita a solução de problemas, além da busca online.
- O suporte de maneira simples à maioria dos SGBDs do mercado atende às necessidades de sites dinâmicos com acesso a bancos de dados.
O Que é Possível Realizar em PHP?
- Em sendo uma linguagem de uso geral, podemos realizar praticamente qualquer atividade realizada com outra linguagem. Ele roda no lado servidor, como aplicação Web e também roda no lado cliente, com o PHP-GTK.
- Existem edições para os principais sistemas operacionais (Linux, BSDs, Windows, Mac OS X, etc).
- Suportado pela maioria dos servidores Web, especialmente pelo Apache.
- Bom suporte à orientação a objetos, em especial com a chegada da versão 5.
- Comunicação com Java.
- Suporte aos principais SGBDs do mercado (MySQL, PostgreSQL, Oracle, SQL Server, etc), atualmente são mais de vinte os suportados.
- Suporte a LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (em Windows somente), a IRC, compressão (gzip, bz2, rar), PDF, GD, Flash, XML, etc..
2 - TUTORIAL SIMPLES
Para continuar você deve ter um servidor web instalado e com suporte a PHP e, caso queira usar bancos de dados, instale um SGBD.
Os arquivos em PHP somente funcionam corretamente no navegador, se estivem no diretório reconhecido pelo servidor web, que é o DocumentRoot. Considerando que o PHP e Apache tenham sido instalados com o Xampp e que o diretório web seja o default, este fica em:
C:\Arquivos de Programas\Xampp\htdocs
Além disso qualquer script que contenha algo em PHP deve ter a extensão .php para que seja corretamente processado pelo Apache.
Criar um arquivo chamado olamundo.php na pasta C:\Arquivos de Programas\Xampp\htdocs, com o conteúdo:
<?php
echo "Olá PHP!";
?>
Startar o Apache e abrir no browser assim:
http://127.0.0.1/olamundo.php
Visualizar resultado de script PHP no Browser
Após ter executado o olamundo.php no Browser solicite a visualização do código fonte da página exibida.
Veja que nada chega de PHP. O PHP é processado no servidor e envia apenas o resultado em HTML para o browser.
Alerta sobre Editores e Processadores de Texto com PHP
Para criar scripts PHP evite o uso de processadores de texto e de editores como o Bloco de Notas, pois deixam sujeira no código e dificultam o salvamento do arquivo.
Preferentemente use uma IDE especializada em PHP, que inclusive tem outros recursos úteis, a exemplo do PHPEclipse ou um editor de texto como o freeware Win32pad.
Informações sobre o PHP
Para obter diversas informações úteis sobre o PHP instalado no seu servidor, execute um script com a função:
<?php
phpinfo();
?>
Checar navegador em uso
if (strstr($_SERVER["HTTP_USER_AGENT"], "MSIE")) {
echo "Seu navegador é o Internet Explorer!";
} else {
echo "Seu navegador não é o IE!";
}
strstr - procura substrings.
Teste com echo e print:
<?php
// Teste de echo e print
//print "primeiro, ", "segundo"; // Gera erro de parser
echo "primeiro, ", "segundo, ", "terceiro"; //Funciona
// Ou seja, print pode trabalhar apenas com uma string de cada vez e echo com várias
?>
print retorna valor enquanto que echo não retorna.
<?php
$print = print "";
echo "Retorno do print: " . $print;
?>
Agora teste esse:
<?php
$echo = echo "";
echo "Retorno do echo: " . $echo;
?>
Irá receber um erro fatal (do parser).
3 - CONFIGURAÇÕES
php.ini
register_globals = off (por questões de segurança)
No Xampp o php.ini traz register_globals ativo por default.
GD, pgsql, mysql e outras extensões que queira usar deverá descomentar no php.ini, seção Extensions.
httpd.conf
Para poder alterar o diretório web default deverá mudar dois parâmetros no arquivo httpd.conf do Apache:
DocumentRoot “/opt/lampp/htdocs”
<Directory "/opt/lampp/htdocs">
Os diretórios acima são para a edição for Linux do Xampp. Para o Windows observe que o Apache utiliza, não barras, que são utilizadas neste SO, mas sim contra-barras e as vezes contra-barras duplas.
No caso queremos mudar o diretório default para /home/www, então alteramos o httpd.conf para que fique assim:
DocumentRoot “/home/www”
<Directory "/home/www">
No Windows fica assim:
DocumentRoot "c:/Arquivos de Programas/Xampp/htdocs"
<Directory "<c:/Arquivos de Programas/Xampp/htdocs">
Que devem ficar assim:
DocumentRoot "c:/1www"
<Directory "<c:/1www">
Configuração das extensões suportadas. Altere a linha:
DirectoryIndex index.html index.html.var index.php index.php3 index.php4
Veja que acima configurou-se para perceber inclusive arquivos com as extensões .php3 e .php4.
Caso não fossem incluídas, arquivos com extensão .php3 e .php4 não poderiam ser abertos neste servidor.
4 - REFERÊNCIA DA LINGUAGEM
Separador de Instruções
O ponto e vírgula ; é o separador de instruções em PHP (como em Perl e em C).
Sempre que uma instrução terminar devemos digitar um ponto e vírgula (echo "ola"; ).
Comentários
Em PHP podemos usar 3 tipos de comentários (/* ... */, // e #) mas devemos utilizar somente os dois primeiros e o primeiro é o mais eficiente, que é o /* ... */, que veio do C, já que # está em processo de obsolescência. Ou seja, devemos usar // ou /* ... */, de preferência este último.
5 - TIPOS DE DADOS
O PHP suporta os oito tipos primitivos:
- boolean, integer, float e string (básicos)
- array e object (compostos)
- resource e NULL (especiais)
float é sinônimo de double em PHP.
Tipo de Variável
O tipo de uma variável em PHP não é controlado pelo programador, depende do valor da variável e é avaliado em tempo de execução. Não é permitido ao programador declarar o tipo de variáveis.
Funções que Retornal o Tipo
gettype
todas as is_type
Casting
(tipo) variavel;
Boleanos
Pode ser TRUE ou FALSE (case-insensitive)
Exemplos:
<?php
echo gettype((bool) "")."<br>"; // bool(false)
echo gettype((bool) 1)."<br>"; // bool(true)
echo gettype((bool) -2)."<br>"; // bool(true)
echo gettype((bool) "foo")."<br>"; // bool(true)
echo gettype((bool) 2.3e5)."<br>"; // bool(true)
echo gettype((bool) array(12))."<br>"; // bool(true)
echo gettype((bool) array())."<br>"; // bool(false)
?>
Convertendo Explicitamente para Boleano
Usa-se o modificador (bool) ou (boolean).
Valores que são considerados FALSE
FALSE, 0, 0.0, "0", "", array vazio, objeto sem membros e NULL (e variáveis indefinidas).
Os demais são TRUE
Inteiros
Em PHP, inteiro é um número do conjunto matemático dos Inteiros (Z), que contem os negativos, o zero e os positivos.
Em PHP os inteiros podem ser decimais, octais ou hexadecimais.
octal - precedido por 0.
hexadecimal - precedido por 0x.
Exemplos:
<?php
$a =1234;
echo $a."<br>"; // número decimal
$a =-123;
echo $a."<br>"; // um número negativo
$a =0123;
echo $a."<br>"; // número octal (equivalente a 83 em decimal)
$a =0x1A;
echo $a."<br>"; // número hexadecimal (equivalente a 26 em decimal)
?>
O tamanho dos inteiros depende da plataforma e é de 32 bits com sinal. O PHP não suporta inteiros sem sinal.
Overflow - caso seja especificado um número inteiro além dos limites, será interpretado como flutuante.
Convertendo Explicitamente para Inteiro
Usar o modificador (int) ou (integer).
Ou com a função intval().
De boleanos - FALSE será retornado como 0 e TRUE como 1.
De flutuantes - ao converter para inteiros serão truncados
De strings - A string será avaliada como um ponto flutuante se contiver qualquer um dos caracteres '.', 'e', ou 'E'. Em outros casos, ela será avaliada como um inteiro.
De outros tipos - não têm precisão, exatidão, portanto é melhor evitar.
Alerta:
echo (int) ((0.1 + 0.7 ) * 10); // Exibirá 7 ao invés do esperado 8
Ponto Flutuante
É o float, double ou real.
Exemplos:
1.234 ou 1.2e3 ou 7E-10
<?php
$a = 1.234;
echo $a."<br>";
$b = 1.2e3;
echo $b."<br>";
$c = 7E-4;
echo $c;
?>
O tamanho de um float depende também da plataforma e é de 64bits no formato IEEE(*).
Nunca compare números em ponto flutuante em igualdades, sob pena de cometer erros.
* - (Wikipedia - http://pt.wikipedia.org )O Instituto de Engenheiros Eletricistas e Eletrônicos ou IEEE (pronuncia-se I-3-E ) é uma organização profissional sem fins lucrativos, fundada nos Estados Unidos. É a maior (em número de sócios) organização profissional do mundo. O IEEE foi formado em 1963 pela fusão do Instituto de Engenheiros de Rádio (IRA) com o Instituto Americano de Engenheiros Elétricistas (AIEE). O IEEE tem filiais em muitas partes do mundo, sendo seus sócios engenheiros eletricistas, engenheiros da computação, cientistas da computação, profissionais de telecomunicações etc. Sua meta é promover conhecimento no campo da engenharia elétrica, eletrônica e computação. Um de seus papéis mais importantes é o estabelecimento de padrões para formatos de computadores e dispositivos.
Strings
Em PHP um caractere ocupa um byte. Até a versão 5 o PHP não tem suporte a UNICODE, mas está previsto este suporte para a próxima versão (Fonte: Wikipedia - http://www.wikipedia.org).
Não há limite para o tamanho de uma string em PHP.
Especificando Strings:
- apóstrofos (chamados de aspas simples ' )
- aspas (chamadas de aspas duplas " )
- heredoc (<<<)
Exemplos:
<?php
echo 'isto é uma string comum';
echo 'Você pode incluir novas linhas em strings,
dessa maneira que estará
tudo bem';
// Imprime: Arnold disse uma vez: "I\'ll be back"
echo 'Arnold once said: "I\'ll be back"';
// Imprime: Você tem certeza em apagar C:\*.*?
echo 'Você tem certeza em apagar C:\\*.*?';
// Imprime: Você tem certeza em apagar C:\*.*?
echo 'Você tem certeza em apagar C:\*.*?';
// Imprime: Isto não será substituido: \n uma nova linha
echo 'Isto não será substituido: \n uma nova linha';
// Imprime: Variaveis $também não $expandem
echo 'Variaveis $também não $expandem';
echo '<br>------------<br>';
$str = <<<EOD
Exemplo de uma string
distribuída em várias linhas
utilizando a sintaxe heredoc.
EOD;
/* Exemplo mais complexo, com variáveis */
class foo
{
var $foo;
var $bar;
function foo()
{
$this->foo = 'Foo';
$this->bar = array('Bar1', 'Bar2', 'Bar3');
}
}
$foo = new foo();
$name = 'Meu nome';
echo <<<EOT
Meu nome é "$name". Eu estou imprimindo $foo->foo.
Agora, eu estou imprimindo {$foo->bar[1]}.
Isto deve imprimir um 'A' maiúsculo: \x41
EOT;
6 - VARIÁVEIS
Em PHP as variáveis são iniciadas por um sinal de dólar $.
Variáveis Predefinidas
São as que já vêm definidas no próprio PHP. A função phpinfo() mostra também estas variáveis.
Com o PHP 4.2 o valor default da diretiva register_globals passou a ser off. Com isso as variáveis passaram a ser acessadas de forma diferente e muitos scripts deixaram de funcionar quanto tiveram o PHP atualizado e outros novos scripts não funcionaram devido esperar uma semelhante a anteerior.
On Off
=======================================================
$DOCUMENT_ROOT $_SERVER['DOCUMENT_ROOT'];
$HOME $_ENV['HOME'];
$GLOBALS
$_SERVER
$_GET
$_POST
$_REQUEST
$_SESSION
Obs.: Agora, como o default do PHP é register_globals = Off, faz-se necessário usar $_POST['nomecampo'], para receber o valor de um campo de form em script PHP.
Escopo de Variáveis
O escopo de uma variável é o contexto onde ela foi definida e geralmente o escopo é local.
$a = 1;
include ("teste.php");
// $a estará disponível, será vista por teste.php, pois foi definida antes.
include ("teste.php");
$a = 1;
// Aqui, como $a foi definida após a inclusão, não será visto pelo teste.php
Escopo de variáveis em funções
A palavra-chave global pode preceder uma variável para tornar seu escopo global, como também $GLOBALS[].
Exemplos:
$a = 1; /* escopo global */
function Teste(){
echo $a; /* referencia uma variável do escopo local (não definida) */
}
Teste();
?>
<?php
$a = 1; /* escopo global */
function Teste(){
global $a;
echo $a; /* referencia a variável do escopo global */
}
Teste();
?>
Usando $GLOBALS no lugar de global
$a = 1;
$b = 2;
function Soma(){
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}
Soma();
echo $b;
?>
Utilizando Variáveis Estáticas
Variáveis estáticas guardam o valor de variáveis entre execuções de funções.
Ao fechar o programa, ao fechar ou atualizar o browser, o valor da variável se perde.
Exemplos:
<?php
function Teste (){
$a = 0;
echo $a;
$a++;
}
for ($x=1;$x<10;$x++){
Teste();
}
echo "<br><br>";
function Teste2(){
static $a = 0;
echo $a;
$a++;
}
for ($x=1;$x<10;$x++){
Teste2();
}
echo "<br><br>";
// Função recursiva
function Teste3()
{
static $count = 0;
$count++;
echo $count;
if ($count < 10) {
Teste3 ();
}
$count--;
}
for ($x=1;$x<5;$x++){
Teste3();
if ($x < 4) echo " - ";
}
echo "<br><br>";
//Declarando variáveis static
function foo(){
static $int = 0; // correro
//static $int = 1+2; // errado (é uma expressão)
//static $int = sqrt(121); // wrong (é uma expressão também)
$int++;
echo $int;
}
foo();
?>
Variáveis Variáveis
São variáveis cujos nomes podem ser criados dinamicamente.
Variável comun -> $variavel;
Variável variável -> $$variavelvariavel;
Ela torna o valor de uma variável e o trata como se fosse o nome de uma variável.
Obs.: variáveis variáveis não podem ser utilizadas com os arrays superglobais.
Determiando o Tipo das Variáveis
gettype
is_array, is_float, is_int, is_object, is_string, is_numeric
7 - CONSTANTES
O valor de uma constante não pode ser alterado durante a execução do script.
Convenciona-se usar o nome de constantes com todas as letras em maiúsculas.
define ("NOME", "valor");
Exemplos:
<?php
// Nomes de constantes válidos
define("FOO", "alguma coisa");
define("FOO2", "alguma outra coisa");
define("FOO_BAR", "mais alguma outra coisa")
// Nomes de constantes inválidas
define("2FOO", "alguma coisa");
// Isto é válido, mas deve ser evitado:
// O PHP pode vir a fornercer uma constante mágica
// que danificará seu script
define("__FOO__", "alguma coisa");
?>
Obs.: Somente dados escalares (bolean, integer, float, e string) podem ser armazanados nos valores de constantes.
A função constant() retorna o valor de uma constante.
A função get_defined_constantes() retorna todas as constantes definidas.
Enquanto que defined() checa se uma constante foi definida.
define (NOME, valor);
define ("PESO", 70);
print "O peso vale " . PESO . " KG";
<?php
switch (PHP_OS){
case "WIN32":
echo "Sistema Windows";
break;
case "Linux":
echo "Sistema Linux";
break;
case "OS/2":
echo "Sistema OS/2";
break;
default:
echo "Sistema não é Windows, Linux nem OS/2";
break;
}
?>
<?php
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
echo 'Este é um servidor usando Windows!';
} else {
echo 'Este é um servidor que não usa Windows!';
}
?>
Constantes Mágicas
Essas são as cinco constantes "mágicas", que mudam dependendo de onde elas são utilizadas. Por exemplo, o valor de __LINE__ depende do número da linha em que é utilizada em seu script. Essas constantes especiais são insensíveis ao caso:
Algumas constantes "mágicas" do PHP
Nome | Descrição |
---|---|
__LINE__ | A linha atual do script. |
__FILE__ | O caminho completo e nome do arquivo. Se utilizado dentro de um include, o nome do arquivo incluído será retornado. |
__FUNCTION__ | O nome da função (Acrescentado no PHP 4.3.0). A partir do PHP 5 esta constante retorna o nome da função como ela foi declarada (sensível a maiúsculas e minúsculas). No PHP 4 sempre retorna o nome em minúsculas. |
__CLASS__ | O nome da classe (Acrescentado no PHP 4.3.0). A partir do PHP 5 esta constante retorna o nome da função como ela foi declarada (sensível a maiúsculas e minúsculas). No PHP 4 sempre retorna o nome em minúsculas. |
__METHOD__ | O nome do método de classe. (Acrescentado no PHP 5.0.0). O nome do método é retornado como foi declarado (sensível a maiúsculas e minúsculas). |
Veja também get_class(), get_object_vars(), file_exists(), e function_exists().
8 - EXPRESSÕES
Uma expressão é qualquer coisa que tem um valor, normalmente na forma de constantes ou variáveis.
$a = 5;
Temos acima uma equação formada por duas expressões, a da esquerda composta por uma variável e a da direita composta por uma constante.
Funções são expressões cujo valor é igual ao seu valor de retorno.
O PHP é uma linguagem orientada as expressões.
Atribuições são analisadas da direita para a esquerda.
$b = $a = 5; // $a recebe 5 e então $b recebe 5
Exemplo:
<?php
function dobro($i){
return $i*2;
}
$b = $a = 5;echo $b."<br>"; /* atribui o valor cinco às variáveis $a e $b */
$c = $a++;echo $c."<br>"; /* pós-incremento, atribui o valor original de $a
(5) para $c */
$e = $d = ++$b;echo $e."<br>"; /* pré-incremento, atribui o valor incrementado de
$b (6) a $d e $e */
/* neste ponto, tanto $d quanto $e são iguais a 6 */
$f = dobro($d++);echo $f."<br>"; /* atribui o dobro do valor de $d antes
do incremento, 2*6 = 12 a $f */
$g = dobro(++$e);echo $g."<br>"; /* atribui o dobro do valor de $e depois
do incremento, 2*7 = 14 a $g */
$h = $g += 10;echo $h."<br>"; /* primeiro, $g é incrementado de 10 e termina com o
valor 24. o valor da atribuição (24) é
então atribuído a $h, e $h termina com o valor
24 também. */
?>
9 - OPERADORES
Um operador é algo que alimentado com um ou mais valores devolve outro valor. Assim as funções e outros construtores que retornam valor são operadores.
Tipos de Operadores
- unários - operam apenas em um valor (!, ++, ...)
- binários - operam em dois valores (+, - , ...)
- ternário - selecionar entre 2 valores, dependendo de um terceiro. Emglobá-los entre parênteses facilita o entendimento.
Precedência de Operadores
A precedência de um operador em relação a outro diz que um operador deve ser executado antes do outro.
Exemplo:
1 + 5 * 3
Dependendo da precedência dos operadores + ou * teremos resultados diferentes.
Se o operador + tiver precedência superior ao * então resolveremos assim:
Somamos 1 + 5 e somente depois multiplicamos por 3 -> (1+5)*3 = 6*3 = 18
Este resultado está incorreto, pois o operador * tem precedência superior ao + e deveria ser assim:
1+(5*3) = 1+15=16
Para facilitar a percepção das precedências usa-se parêntesis:
1 + (5 * 3) = Sempre devemos resolver antes o que estiver entre parêntesis.
1 + 15 = 16 (Neste caso fica mais claro).
Veja a tabela contendo a precedência de dos operadores do PHP, da maior precedência para a menor:
* e / têm precedência sobre + e -.
Obs.: Para uma relação completa das precedências veja o manual oficial no site do PHP.
Operadores Aritméticos
São os operadores correspondentes às quatro operações comuns da matemática adicionados ao operador módulo:
• soma (+)
• subtração (-)
• multiplicação (*)
• divisão (/)
• módulo (%)
O módulo é o resto de um número dividido por outro.
Exemplos de operadores aritméticos:
$a = 9;
$b = 4;
echo "\$a + \$b = ".($a + $b); // 13
echo "\$a + \$b = ".$a + $b; // Retorna 4, pois após o ponto é considerado strings
echo "\$a - \$b = ".($a - $b); // 5
echo "\$a * \$b = ".$a * $b; // 36
echo "\$a / \$b = ".$a / $b; // 2.25 - Divisão Quociente de $a por $b.
echo "\$a % \$b = ".$a % $b; // 1 - Resto de $a por $b
Operadores de Atribuição
O operador básico de atribuição é o sinal de igualdade =.
Exemplo:
$x = $y + 3; // O que representa: 3 será adicionado a $y e o resultado será atribuído a $x
$a = 3;
$a += 5; // Que é semelhante a $a = $a + 5;
$b = "Bom ";
$b .= "Dia!"; // Similar a $b = $b . "Dia!";
Exemplos:
<?php
$a = 3;
$a += 5; // $a recebe 5 e soma com seus 3, tipo: $a = $a + 5;
echo "\$a vale " . $a;
$b = "Bom ";
$b .= "Dia!"; // $b fica com "Bom Dia!", como em $b = $b . "Dia!";
echo "\$b vale " . $b;
$c=2;
$a -= $c; //$a = $a - $c Subtração
echo "\$a -= \$c vale " . $a;
$a *= $c; //$a = $a * $c Multiplicação
echo "\$a *= \$c vale " . $a;
$a /= $c; //$a = $a / $c Divisão
echo "\$a /= \$c vale " . $a;
$resto = $a % $c; //$a = $a % $c Módulo (resto)
echo "Resto de $a % $c vale: " . $resto;
?>
Operadores de Controle de Erro
Representado pelo símbolo de arroba @. Quando precede uma expressão ele abafa as mensagens de erro.
Observação - Somente funciona em expressões, ou seja, em qualquer construção que retorne algo.
Recomendação - Deixar todas as mensagens de erro originais do PHP livres em ambientes de desenvolvimento (de testes). Somente utilizar @ em ambiente de produção, após executar os testes.
Exemplos:
<?php
/* Erro intencional */
$a = 6;
$b = 0;
echo "Camuflando erro de divisão por zero";
$c = @($a / $b);
?>
Operadores de Execução
Existem algumas funções de execução de programas (shell_exec e outras) como também existe um operador, que é formado por dois sinais de crase` `.
Nota: Caso safe_mode esteja desativado no php.ini como também shell_exec() então o operador de execução também fica dasativado.
Exemplo:
<?php
// Em PHP a crase ` é um operador de execução de arquivos do SO
// Como em scripts bash
// Exibir todos os arquivos do diretório atual, inclusive os ocultos
if (PHP_OS == "WINNT"){
$output = `dir/o/p`;
echo "<pre>$output</pre>";
} elseif (PHP_OS == "Linux){
$output = `ls -la`;
echo "<pre>$output</pre>";
}else{
echo "Você está usando um SO diferente de Linux e de Windows!"
}
?>
Operadores de Incremento e de Decremento
Os operadores de pré e pós-incremento/decremento são suportados pelo PHP.
++$a (pré-incremento) - Primeiro incrementa $a de 1, depois retorna $a incrementado
$a++ (pós-incremento) - Primeiro retorna $a, depois incrementa $a de 1
--$a (pré-decremento) - Primeiro decrementa $a de 1, depois retorna $a decrementado
$a-- (pós-decremento) - Primeiro retorna $a, depois decrementa $a de 1
Exemplos:
<?php
echo "<h3>Pós-incremento</h3>";
$a = 5;
echo "\$a = ".$a."<br><br>";
echo "\$a++ deve ser: " . $a++ . "<br />\n";
echo "\$a deve ser: " . $a . "<br />\n";
echo "<h3>Pré-incremento</h3>";
$a = 5;
echo "++\$a deve ser: " . ++$a . "<br />\n";
echo "\$a deve ser: " . $a . "<br />\n";
echo "<h3>Pós-decremento</h3>";
$a = 5;
echo "\$a-- deve ser: " . $a-- . "<br />\n";
echo "\$a deve ser: " . $a . "<br />\n";
echo "<h3>Pré-decremento</h3>";
$a = 5;
echo "--\$a deve ser: " . --$a . "<br />\n";
echo "\$a deve ser: " . $a . "<br />\n";
?>
Operadores Lógicos
Utilizados para comparar duas expressões e o resultado será TRUE ou FALSE.
Exemplos:
<?php
$a = true; $b = FALSE; // true e false são insensitivos
echo ($a and $b)? "T<br>":"F<br>"; //E Verdadeiro (TRUE) se tanto $a quanto $b são verdadeiros.
echo ($a or $b)? "T<br>":"F<br>"; //OU Verdadeiro se $a ou $b são verdadeiros.
echo ($a xor $b)? "T<br>":"F<br>"; //XOR Verdadeiro se $a ou $b são verdadeiros, mas não ambos.
echo (! $a)? "T<br>":"F<br>"; //NÃO Verdadeiro se $a não é verdadeiro.
echo ($a && $b)? "T<br>":"F<br>"; //E Verdadeiro se tanto $a quanto $b são verdadeiros.
echo ($a || $b)? "T<br>":"F<br>"; //OU Verdadeiro se $a ou $b são verdadeiros.
?>
Operadores de String
Strings em PHP são concatenadas com o operador ponto final ".".
Exemplos:
<?php
$a = "Olá ";
$b = $a . "mundo do PHP!";
echo $b;
$a = "Olá ";
$a .= "meu mundo!";
echo "<br>" . $a;
?>
Convertendo strings em números
<?php
$foo = 1 + "10.5";echo $foo."<br>"; // $foo é float (11.5)
$foo = 1 + "-1.3e3";echo $foo."<br>"; // $foo é float (-1299)
$foo = 1 + "bob-1.3e3";echo $foo."<br>"; // $foo é integer (1)
$foo = 1 + "bob3";echo $foo."<br>"; // $foo é integer (1)
$foo = 1 + "10 Small Pigs";echo $foo."<br>"; // $foo é integer (11)
$foo = 4 + "10.2 Little Piggies";echo $foo."<br>"; // $foo é float (14.2)
$foo = "10.0 pigs " + 1;echo $foo."<br>"; // $foo é float (11)
$foo = "10.0 pigs " + 1.0;echo $foo."<br>"; // $foo é float (11)
?>
Operações com Strings
<?php
// Pega o primeiro caracter da string
$str = 'Isto é um teste.';
$first = $str{0};
echo $first."<br>";
// Pega o terceiro caracter da string
$third = $str{2};
echo $third."<br>";
// Pega o último caracter da string
$str = 'Isto ainda é um teste.';
$last = $str{strlen($str)-1};
echo $last."<br>";
// Modifica o ultimo caracter da string
$str = 'Olhe o mal';
echo $str{strlen($str)-1} = 'r';
?>
Operadores com Arrays
Exemplo |
Nome |
Resultado |
---|---|---|
$a + $b |
União |
União de $a e $b. |
$a == $b |
Igualdade |
TRUE se $a e $b tem os mesmos elementos. |
$a === $b |
Identidade |
TRUE se $a e $b tem os mesmos elementos na mesma ordem. |
$a != $b |
Desigualdade |
TRUE se $a não é igual a $b. |
$a <> $b |
Desigualdade |
TRUE se $a não é igual a $b. |
$a !== $b |
Não identidade |
TRUE se $a não é identico a $b. |
O operador + acrescenta o array da direita no array da esquerda, contudo, chaves duplicadas NÃO são sobrescritas.
Exemplos:
<?php
$a = array("a" => "maçã", "b" => "banana");
$b = array("a" =>"pêra", "b" => "framboesa", "c" => "morango");
$c = $a + $b; // Uniao de $a e $b
echo "União de \$a e \$b: \n";
var_dump($c);
$c = $b + $a; // União de $b e $a
echo "União de \$b e \$a: \n";
var_dump($c);
?>
Observar que na união de $a+$b o valor de "b" é banana em $a, ele não foi sobrescrito por framboesa de $b.
Assim como framboesa "b" em $b não foi substituído por banana de $a na união de $b+$a.
10 - ESTRUTURAS DE CONTROLE
As principais estruturas para controlar o fluxo dos scripts PHP.
if, else, elseif, while, do... while, for, break, consinue e switch.
Um script PHP é formado por instruções (cada instrução termina com ;).
Uma instrução pode ser:
- uma atribuição
- uma chamada de função
- um laço (loop)
- uma instrução condicional
- até uma instrução nula (;;).
As instruções podem ser agrupadas com chaves, formando blocos.
if - uma construção muito importante e versátil. Permite a execução condicional de fragmentos de código.
Sintaxe:
if (expressao) {
instrucoes;
}
expressao - é avaliada como TRUE ou FALSE
- Se TRUE as instrucoes serão executadas
- Se FALSE as instrucoes serão ignoradas
Exemplos:
<?php
$a = 5;
$b = 3;
if ($a > $b){
echo "a é maior que b";
}
?>
else - executa instrucoes2 caso expressao seja FALSE.
Sintaxe:
if (expressao) {
instrucoes;
} else {
instrucoes2;
}
Exemplos:
<?php
$a = 3;
$b = 5;
if ($a > $b){
echo "a é maior que b";
} else {
echo "a NÃO é maior que b";
}
?>
elseif - é uma combinação de if com else. Caso a expressao do if seja FALSE então o elseif testa a expresao2, se esta for TRUE instrucoes2 serão executadas, caso contrário instrucoes3 serão executadas.
Sintaxe:
if (expressao) {
instrucoes;
} elseif (expressao2) {
instrucoes2;
} else {
instrucoes3;
}
<?php
$a = 3;
$b = 3;
if ($a > $b){
echo "a é maior que b";
} elseif ($a==$b){
echo "a é igual a b";
} else {
echo "a NÃO é maior que b nem igual a b";
}
?>
while - executa instruções várias vezez, enquanto uma expressão for verdadeira (TRUE).
Sintaxe:
while (expressao) {
instrucoes;
}
Em cada iteração expressao é avaliada, se TRUE instrucoes serão executadas, se FALSE, serão ignoradas.
Exemplos:
<?php
$i = 1;
while ($i <= 10) {
echo $i++; /* o valor impresso será
$i depois do acréscimo
(post-increment) */
}
?>
do ... while - Semelhante ao while, diferindo no fato da expressão condicional ficar ao final das iterações.
No do ... while a primeira iteração sempre executará as instruções incondicionalmente.
Sintaxe:
do {
instrucoes;
} while (expressoes); // Atentar para o ponto e vírgula ao final
Exemplos:
<?php
// Executa pelo menos uma vez incondicionalmente
$i = 6; $fator = 2; $minimo = 10;
do {
if ($i < 5) {
echo "\$i não é grande o suficiente";
break;
}
$i *= $fator;
if ($i < $minimo) {
break;
}
echo "\$i está Ok e vale " . $i;
} while (0);
/* Exemplo simples
$i = 0;
do {
echo $i;
} while ($i > 0);
*/
?>
for - laço composto por 3 instruções. A primeira é a de inicialização da variável, a segunda será avaliada a cada iteração e a terceira é a de incremento. As 3 separadas por ponto e vírgula. Todas as 3 são opcionais e caso a segunda seja nula o loop será infinito.
Sintaxe:
for (expr1; expr2; expr3) {
instrucoes;
}
- expr1 será avaliada uma única vez incondicionalmente;
- expr2 será avaliada no início de cada iteração:
- Se TRUE o laço continua e as instruções serão executadas
- Se FALSE o laço termina.
- expr3 é avaliada ao final de cada iteração, no caso incrementa a variável
Exemplos:
<?php
/* exemplo 1 - Controla o fluso no for*/
echo "<br><br>1- ";
for ($i = 1; $i <= 10; $i++) {
echo $i;
}
echo "<br><br>2- ";
/* exemplo 2 - Controle o fluxo no if interno*/
for ($i = 1; ; $i++) {
if ($i > 10) {
break;
}
echo $i;
}
echo "<br><br>3- ";
/* exemplo 3 - Controle o fluxo no if interno*/
$i = 1;
for (; ; ) {
if ($i > 10) {
break;
}
echo $i;
$i++;
}
echo "<br><br>4- ";
/* exemplo 4 */
for ($i = 1; $i <= 10;$i++);
echo $i;
?>
foreach - laço para varrer os elementos de uma matriz (array).
Atentar para o fato de que o foreach não requer reset() antes, pois quando é executado o ponteiro interno do array já é zerado automaticamente.
Sintaxe:
foreach (expressao_array as $valor){
instrucoes;
}
foreach (expressao_array as $chave => $valor) {
instrucoes;
}
Exemplos:
<?php
//Você pode ter notado que os seguintes itens são funcionalmente idênticos:
$arr = array("um", "dois", "três");
reset ($arr); // Aponta para o primeiro elemento
while (list(, $value) = each ($arr)) {
echo "Valor: $value<br />";
}
foreach ($arr as $value) {
echo "Valor: $value<br />";
}
//Os seguintes também são funcionalmente idênticos:
$arr = array("one", "two", "three");
reset($arr);
while (list($key, $value) = each ($arr)) {
echo "Chave: $key; Valor: $value<br />";
}
foreach ($arr as $key => $value) {
echo "Chave: $key; Valor: $value<br />";
}
/* exemplo foreach 1: somente valores */
$a = array(1, 2, 3, 17);
foreach ($a as $v) {
echo "Valor atual de \$a: $v.<br>";
}
/* exemplo foreach 2: valores (com as chaves impressas para ilustração) */
$a = array(1, 2, 3, 17);
$i = 0; /* para exemplo somente */
foreach ($a as $v) {
echo "\$a[$i] => $v.<br>";
$i++;
}
/* exemplo foreach 3: chaves e valores */
$a = array (
"um" => 1,
"dois" => 2,
"três" => 3,
"dezessete" => 17
);
foreach ($a as $k => $v) {
echo "\$a[$k] => $v.<br>";
}
?>
break - cancela a execução de laços: for, foreach, while, do ... while ou switch.
break n é suportado, onde n é o número de estruturas a serem canceladas.
Sintaxe:
break;
break n;
Exemplos:
<?php
$arr = array('um', 'dois', 'três', 'quatro', 'PARE', 'cinco');
while (list (, $val) = each ($arr)) {
if ($val == 'PARE') {
break; /* Você poderia colocar 'break 1;' aqui. */
}
echo "$val<br />";
}
echo "<br />";
/* Utilizando o argumento opcional. */
$i = 0;
while (++$i) {
switch ($i) {
case 5:
echo "No 5<br />";
break 1; /* Sai somente do switch. */
case 10:
echo "No 10; saindo<br />";
break 2; /* Sai do switch e while. */
default:
break;
}
}
?>
continue - sai da atual iteração de um loop para continuar na próxima iteração.
Sintaxe:
continue;
continue n;
Enquanto o break encerra definitivamente um laço, o continue encerra somente a iteração atual.
Exemplos:
<?php
$arr = array(1,2,3,4,5,6,7,8);
while (list ($key, $value) = each ($arr)) {
if (!($key % 2)) { // pula itens pares, ou seja, processa somente ímpares
continue;
}
echo ($value);
}
echo "<br>";
$i = 0;
while ($i++ < 5) {
echo "Fora<br />";
while (1) {
echo " Meio<br />";
while (1) {
echo " Dentro<br />";
continue 3;
}
echo "Isto nunca será exibido.<br />";
}
echo "Nem isso.<br />";
}
// Outro exemplo
for ($i = 0; $i < 5; ++$i) {
if ($i == 2)
continue
print "$i\n";
}
?>
switch - similar a uma série de construções if seguidas.
Sintaxe:
switch (variavel) {
case valor1:
instrucoes;
break;
case valor2:
instrucoes2;
break;
case valorN;
instrucoesN;
break;
default:
instrucoesDefault;
break;
}
Exemplos:
<?php
$i = 1;
// Estrutura com if
if ($i == 0) {
echo "\$i igual a 0";
} elseif ($i == 1) {
echo "\$i igual a 1";
} elseif ($i == 2) {
echo "\$i igual a 2";
}
echo "<br>";
// Estruturas com switch
switch ($i) {
case 0:
echo "\$i igual a 0";
break;
case 1:
echo "\$i igual a 1";
break;
case 2:
echo "\$i igual a 2";
break;
}
echo "<br>";
$i = 2;
// Executará todos, falta o break
switch ($i) {
case 0:
echo "\$i igual a 0";
case 1:
echo "\$i igual a 1";
case 2:
echo "\$i igual a 2";
}
echo "<br>";
// Simulando intervalos
switch ($i) {
case 0:
case 1:
case 2:
echo "\$i é menor que 3 mas não negativo";
break;
case 3:
echo "\$i é 3";
}
echo "<br>";
// Valor default
switch ($i) {
case 0:
echo "\$i igual a 0";
break;
case 1:
echo "\$i igual a 1";
break;
case 2:
echo "\$i igual a 2";
break;
default:
echo "\$i não é igual a 0, 1 ou 2";
}
Estruturas em Obsolescência
Devemos evitar, pois em futuras versões não mais serão utilizados.
Funções com nomes antigos, tipo:
pg_numrown, pg_fecharray e similares.
Caso se faça uma busca por estas funções no site do PHP nada será retornado.
As funções atuais tem nomes com espaço separando palavras, como:
pg_num_rown, pg_fech_array e similares.
Algumas funções agora tem outro nome, por exemplo:
pg_exec agora deve ser substuida por pg_query
Algumas estruturas de controle usavam os dois pontos:
while: ... endwhile, if: ... endif, devemos preferir:
while(){ ... }, if(){ ... }
Evitar o uso do comentário tipo shell #.
Estruturas do tipo 4HTTP_POST_VARS e similares foram substituídas por: $_POST e similares.
Formatando Números
number_format
number_format -- Formata um número com os milhares agrupados
string number_format ( float number [, int decimals] )
string number_format ( float number, int decimals, string dec_point, string thousands_sep )
number_format() retorna uma versão formatada de number. Esta função aceita um, dois ou quatro parâmetros (não três):
Se apenas um parâmetro é dado, number será formatado sem decimais, mas com uma virgula (",") entre cada grupo de milhar.
Se dois parâmetros são dados, number será formatado com o número de casas decimais especificadas em decimals com um ponto (".") na frente, e uma vírgula (",") entre cada grupo de milhar.
Se todos os quatro parâmetros forem dados, number será formatado com o número de casas decimais em decimals, dec_point ao invés do ponto (".") antes das casas decimais e thousands_sep ao invés de uma vírgula (",") entre os grupos de milhares.
Somente o primeiro caractere de thousands_sep é usado. Por exemplo, se você usar foo como o parâmetro thousands_sep no número 1000, number_format() irá retornar 1f000.
Exemplo 1. Exemplo number_format()
Por exemplo, a notação Francesa usa duas casas decimais, vírgula (',') como separador decimal, e espaço (' ') como separador de milhar. Isto é feito com a linha :
<?php
// string number_format ( float number, int decimals, string dec_point, string thousands_sep )
$number = 1234.56;
// Notação Brasileira
$numero_format_brasil = number_format($numero, 2, ',', '.');
// 1.234,56
echo "O número' $number' no formato brasileiro fica '$numero_format_brasil'<br><br>";
?>
Validação de Ano Bisexto
<?php
function ano_bisexto($ano){
return ((($ano%4)==0 && ($ano%100) != 0) || ($ano%400)==0);
}
if(ano_bisexto(2006))
echo "Ano bisexto";
else
echo "Ano não bisexto";
?>
Algumas Funções Matemáticas
abs -- Valor absoluto
mixed abs ( mixed número )$abs = abs(-4.2); // $abs = 4.2; (double/float)
$abs2 = abs(5); // $abs2 = 5; (inteiro)
$abs3 = abs(-5); // $abs3 = 5; (inteiro)
?>
ceil -- Arredonda frações para cima
float ceil ( float valor )
echo ceil(4.3); // 5
echo ceil(9.999); // 10
?>
floor -- Arredonda frações para baixo
float floor ( float valor )
echo floor(4.3); // 4
echo floor(9.999); // 9
?>
mixed max ( number arg1, number arg2 [, number ...] )
mixed max ( array numbers [, array ...] )
echo max(1, 3, 5, 6, 7); // 7
echo max(array(2, 4, 5)); // 5
echo max(0, 'hello'); // 0
echo max('hello', 0); // hello
echo max(-1, 'hello'); // hello
// Com arrays múltiplos, max compara da esquerda para direita,
// assim nesse exemplo: 2 == 2, mas 4 < 5
$val = max(array(2, 4, 8), array(2, 5, 7)); // array(2, 5, 7)
// Se forem informados um array e um não array, o array
// é sempre retornado como se ele fosse o maior
$val = max('string', array(2, 5, 7), 42); // array(2, 5, 7)
?>
min -- Localiza o menor número
mixed min ( number arg1, number arg2 [, number ...] )
mixed min ( array numbers [, array ...] )
echo min(2, 3, 1, 6, 7); // 1
echo min(array(2, 4, 5)); // 2
echo min(0, 'hello'); // 0
echo min('hello', 0); // hello
echo min('hello', -1); // -1
// Com arrays múltiplos, min compara da esquerda para direita,
// assim nesse exemplo: 2 == 2, mas 4 < 5
$val = min(array(2, 4, 8), array(2, 5, 1)); // array(2, 4, 8)
// Se ambos forem um array e um não array, o array
// nunca será retornado porque ele é sempre considerado o maior
$val = min('string', array(2, 5, 7), 42); // string
?>
count -- Conta o número de elementos de uma variável
int count ( mixed var [, int mode] )
$a[0] = 1;
$a[1] = 3;
$a[2] = 5;
$result = count($a);
// $result == 3
$b[0] = 7;
$b[5] = 9;
$b[10] = 11;
$result = count($b);
// $result == 3;
?>
Exemplo 2. Uso recursivo da função count() (PHP >= 4.2.0)
$food = array( 'fruits' => array('orange', 'banana', 'apple'),
'veggie' => array('carrot', 'collard','pea'));
// recursive count
echo count($food,COUNT_RECURSIVE); // mostra 8
// normal count
echo count($food); // mostra2 2
?>
pow -- Potência
number pow ( number base, number exp )
var_dump( pow(2,8) ); // int(256)
echo pow(-1,20); // 1
echo pow(0, 0); // 1
echo pow(-1, 5.5); // erro
rand -- Gera um número aleatório
int rand ( [int min, int max] )
echo "Exibir 20 números aleatórios entre 20 e 160<br><br>";
for($x=20;$x<40;$x++){
echo rand($x, 4*$x)."<br>";
}
exit("Saindo...");
round -- Arredonda um número
float round ( float val [, int precision] )
echo round(3.4); // 3
echo round(3.5); // 4
echo round(3.6); // 4
echo round(3.6, 0); // 4
echo round(1.95583, 2); // 1.96
echo round(1241757, -3); // 1242000
echo round(5.045, 2); // 5.04
echo round(5.055, 2); // 5.06
?>
sqrt -- Raiz quadrada
float sqrt ( float arg )
<?php
// Precisão depende de sua diretiva precision
echo sqrt(9); // 3
echo sqrt(10); // 3.16227766 ...
?>
Forçando a Limpeza do Cache
<?php
// Este é para os servidores de proxy. Diz para baixar, bypassando o proxy
header ("Cache-Control: no-cache, must-revalidate");
// Este é para o navegador e nem sempre funciona (falta de padrão entre eles)
header ("Pragma: no-cache");
?>
Redirecionamento de Páginas
header("location: novapagina.php");
Exibir o conteúdo de um arquivo
readfile -- Lê e exibe o conteúdo de um arquivo
readfile('http://www.google.com.br');
readfile('/home/1www/pagina2.php');
Enviar E-mail via PHP
<?php
$to = "Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.";
$subject="Apenas testando";
$message = "Estou testando o envio de e-mail pelo PHP.";
$email="Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.";
$ret=mail($to, $subject, $message, "From: $email\r\nReply-to: $email\r\n");
echo $ret;
?>
Usando Favicon em sites
Aquele pequeno ícone que fica à esquerda da URL do site, na caixa Location do Browser,
que inclusive personaliza a barra de links quando arrastamos o endereço do site.
Para que nosso site apareça para o visitante com um link, devemos seguir os
seguintes procedimentos:
- Criar uma imagem com o logo do site, no formato png, jpg, gif, etc com 32x32 pixels
- Salvar como favicon.png ou outra extensão
- Adicionar a TAG abaixo, na TAG head, como abaixo:
<head>
...
<link href="http://www.seusite.com.br/diretorio/favicon.png" type="image/gif" rel="icon">
...
</head>
Também pode ser assim:
rel="shortcut icon"
Este ícone pode ser inclusive animado.
Referência: lista da Dicas-L (http://www.dicas-l.com.br).
Livros
Desenvolvendo Web Sites com PHP
Editora Novatec
Juliano Niederauer
PHP para quem conhece PHP
Editora Novatec
Juliano Niederauer
PHP Guia do Desenvolvedor
Ed. Berkeley
Sterling Hughes
(Do grupo de desenvolvimento do PHP)
Desvendando aplicações na Web com PHP 4.0
Ed. Ciência Moderna
Tobias Retschiller e
Till Gerken
Links
PHP
http://www.php.net
http://www.php.net/manual/pt_BR/
http://www.phpbrasil.com/
http://www.planet-source-code.com/vb/default.asp?lngWId=8
http://www.hotscripts.com/PHP/index.html
http://www.zend.com (empresa dos dois membros israelenses da equipe de desenvolvimento do PHP, especial ênfase na seção Developer Zone)
http://www.phpwizard.net
http://www.phpclasses.org
http://www.weberdev.com
http://www.devshed.com
http://www.phpmania.org/
http://www.phpnet.us/ - Hospedagem free para PHP e MySQL (300MB)
http://www.superphp.com.br
http://www.scriptbrasil.com/
http://www.faqts.com/knowledge_base/index.phtml/fid/51/
http://www.alt-php-faq.org/
http://ribafs.byethost2.com/
CURSOS GRÁTIS
http://cursos.cdtc.org.br/brasil/ - Cursos Grátis para Func.Públ.
http://www.apostilando.com/download.php?cod=171&categoria=PHP
http://www.aprendaemcasa.com.br/apcasa6.htm
http://www.solocursosgratis.com/cursos_gratis_php-slctema264.htm
CLIPARTS
http://www.digitmania.holowww.com/digital.html – Dígitos (cliparts)
EDITORES
http://paginas.terra.com.br/informatica/php_editor/
POSTGRESQL
http://www.postgresql.org/docs/current/interactive/
http://pgdocptbr.sourceforge.net/pg80/index.html
http://www.designmagick.com/category/3/PostgreSQL
SQL
http://www.firstsql.com/tutor.htm
http://sqlzoo.net/
http://www.sql-tutorial.net/SQL-tutorial.asp
http://www.programmingtutorials.com/sql.aspx
http://tutorials.findtutorials.com/
http://www.hardened-php.net/home.8.html - Hardened PHP Project
http://www.1phpscripts.com/
http://www.weberdev.com/
http://www.goldsofts.com/scriptscategory/10/0/1/0.html
Comments fornecido por CComment