# Aplicativos em PHP/Referências/PHP/PHP1
## ALERTA - PHP4 chegando ao fim da linha

Alerta para que quem ainda não migrou para o PHP 5 inicie sua migração:
Depois de 3 anos de PHP5 e com o PHP 6 chegando, a versão 4 será descontinuada a partir do ano que vem. Bugs críticos ainda serão corridos até o final de agosto de 2008.
Enviado por Marcos Alexandre Lemos Rodrigues para o br-linux (marcosalexandre·rodriguesΘgmail·com)
Notícia original em ingles:
PHP 4 end of life announcement [13-Jul-2007]
Today it is exactly three years ago since PHP 5 has been released. In those three years it has seen many improvements over PHP 4. PHP 5 is fast, stable & production-ready and as PHP 6 is on the way, PHP 4 will be discontinued.
The PHP development team hereby announces that support for PHP 4 will continue until the end of this year only. After 2007-12-31 there will be no more releases of PHP 4.4. We will continue to make critical security fixes available on a case-by-case basis until 2008-08-08. Please use the rest of this year to make your application suitable to run on PHP 5.
For documentation on migration for PHP 4 to PHP 5, we would like to point you to our migration guide. There is additional information available in the PHP 5.0 to PHP 5.1 and PHP 5.1 to PHP 5.2 migration guides as well.
Documentos para ajudar na migração:
Migration Guide - http://www.php.net/manual/en/migration5.php Também - http://www.php.net/manual/en/migration51.php e http://www.php.net/manual/en/migration52.php
Este texto teve como principal fonte de informações o manual oficial do PHP em http://www.php.net/manual/pt_BR/

## - 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 pequneno script em PHP

### Popularidade do PHP

O PHP atualmente deve ser a linguagem web mais usada no planeta.
Segundo estatísticas do site:
http://www.drews.cx/2006/03/23/php-usage-stats-go-up-again/
Onde cita as 4 mais populares linguagens: C, C++, Java e PHP. Nesta ordem.
Observação: todas oriundas do C.
Na prática, entre as linguagens Web o PHP fica em segundo lugar. Acontece que Java é não somente uma linguagem mas uma plataforma, contando com recursos para desktop, microedition, etc. Já PHP tem o uso restrito praticamente à Web.
Veja a lista geral:
http://www.tiobe.com/index.htm?tiobe_index
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.

### Grandes 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..

## - 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:

### Checar navegador em uso

strstr - procura substrings.

### Teste com echo e print

print retorna valor enquanto que echo não retorna.
Agora teste esse:
Irá receber um erro fatal (do parser).

## - 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.

## - 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.

## - 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
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).

### 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
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
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

### Nulos em PHP

NULL
O valor especial NULL representa que a variável não tem valor. NULL é o único valor possível do tipo NULL.
A variável é considerada NULL se:
* ela foi assimilada com a constante NULL.
* ela ainda não recebeu nenhum valor ainda.
* ela foi apagada com unset.
Sintaxe
Há apenas um único valor do tipo NULL, e é a palavra (insensitiva ao caso) NULL.
Exemplos de uso:
Usando: empty is_null !isset
Agora com SQL:
* NULL AND TRUE yields NULL
* NULL OR TRUE yields TRUE
* NULL AND FALSE yields FALSE
* NULL OR FALSE yields NULL
* NULL == TRUE yields FALSE
* NULL == FALSE yields FALSE
is_null
is_null - Informa se a variável é NULL
Descrição
bool is_null ( mixed $var )
Retorna TRUE se var é null, FALSE senão.
Veja o tipo NULL para saber quando a variável é considerada NULL e quando não.
Veja mais em NULL, is_bool, is_numeric, is_float, is_int, is_string, is_object, is_array, is_integer e is_real.
unset
unset - Destrói a variável especificada
Descrição
void unset ( mixed $var [, mixed $var [, $...]] )
unset destrói a variável especificada. Lembrando que no PHP 3, unset sempre retornará TRUE (atualmente, o valor inteiro 1). No PHP 4, porém, unset não é uma função verdadeira: agora é um construtor da linguagem. Como tal, nenhum valor é retornado, se tentar pegar o valor de unset um erro de sintaxe (parse error) irá acontecer.
Exemplo:

## - 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.
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.

### 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:

### 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

### 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

## - 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
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.

### 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.

## - 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

## - 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.

### Operadores de Atribuição

O operador básico de atribuição é o sinal de igualdade =.
Exemplo
Exemplos

### 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

### 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
} elseif (PHP_OS == "Linux){
echo "
}else{

### Operadores de Incremento e de Decremento

Os operadores de pré e pós-incremento/decremento são suportados pelo PHP.
Exemplos:

### Operadores Lógicos

Utilizados para comparar duas expressões e o resultado será TRUE ou FALSE.
Exemplos:

### Operadores de String

Strings em PHP são concatenadas com o operador ponto final ".".
Exemplos:

### 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:
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.