PHP Histórico
A linguagem surgiu por volta de 1994, como um pacote de programas CGI criados por Rasmus Lerdof, com o nome Personal Home Page Tools, para substituir um conjunto de scripts Perl que ele usava no desenvolvimento de sua página pessoal. Em 1997 foi lançado o novo pacote da linguagem com o nome de PHP/FI, trazendo a ferramenta Forms Interpreter, um interpretador de comandos SQL.

Mais tarde, Zeev Suraski desenvolveu o analisador do PHP 3 que contava com o primeiro recurso de orientação a objetos, que dava poder de alcançar alguns pacotes, tinha herança e dava aos desenvolvedores somente a possibilidade de implementar propriedades e métodos.

Pouco depois, Zeev e Andi Gutmans, escreveram o PHP 4, abandonando por completo o PHP 3, dando mais poder à máquina da linguagem e maior número de recursos de orientação a objetos. O problema sério que apresentou o PHP 4 foi a criação de cópias de objetos, pois a linguagem ainda não trabalhava com apontadores ou handlers, como é a linguagem Java.

O problema fora resolvido na versão atual do PHP, a versão 5, que já trabalha com handlers. Caso se copie um objeto, na verdade copiaremos um apontador, pois, caso haja alguma mudança na versão original do objeto, todas as outras também sofrem a alteração, o que não acontecia na PHP 4.

Trata-se de uma linguagem extremamente modularizada, o que a torna ideal para instalação e uso em servidores web. Diversos módulos são criados no repositório de extensões PECL (PHP Extension Community Library) e alguns destes módulos são introduzidos como padrão em novas versões da linguagem. É muito parecida, em tipos de dados, sintaxe e mesmo funções, com a linguagem C e com a C++. Pode ser, dependendo da configuração do servidor, embarcada no código HTML. Existem versões do PHP disponíveis para os seguintes sistemas operacionais: Windows, Linux, FreeBSD, Mac OS, OS/2, AS/400, Novell Netware, RISC OS, IRIX e Solaris.

A Wikipédia funciona sobre um software inteiramente escrito em PHP, usando bases de dados MySQL: o MediaWiki.

Construir uma página dinâmica baseada em bases de dados é simples com PHP, (em parte, vale lembrar), este provê suporte a um grande número de bases de dados: Oracle, Sybase, PostgreSQL, InterBase, MySQL, SQLite, MSSQL, Firebird, etc., podendo abstrair o banco com a biblioteca ADOdb, entre outras.

PHP tem suporte aos protocolos: IMAP, SNMP, NNTP, POP3, HTTP, LDAP, XML-RPC, SOAP. É possível abrir sockets e interagir com outros protocolos. E as bibliotecas de terceiros expandem ainda mais estas funcionalidades.

Existem iniciativas para utilizar o PHP como linguagem de programação de sistemas fixos. A mais notável é a PHP-GTK. Trata-se de um conjunto do PHP com a biblioteca GTK, portada do C++, fazendo assim softwares inter-operacionais entre Windows e Linux. Na prática, essa extensão tem sido muito pouco utilizada para projetos reais.
carece de fontes?.

Principais características

A linguagem PHP é uma linguagem de programação de domínio específico, ou seja, seu escopo se estende a um campo de atuação que é o desenvolvimento web, embora tenha variantes como o PHP-GTK. Seu propósito principal é de implementar soluções web velozes, simples e eficientes.

Características:

Velocidade e robustez
Estruturado e orientação a objeto
Portabilidade - independência de plataforma - escreva uma vez, rode em qualquer lugar;
Tipagem fraca
Sintaxe similar a Linguagem C/C++ e o PERL

Olá Mundo! em PHP
<?php
echo "Olá Mundo!";
?>

Exemplo da sintaxe
<?php

include('code.php'); // Inclui e executa um trecho opcional de código

require('code.php'); // O mesmo que 'include', porém pára a execução caso o arquivo não seja encontrado

require_once('code.php'); // O mesmo que require, mas evita que o trecho seja incluído novamente



echo 'abc'; /* Escrever abc */

print 'abc'; /* Realiza o mesmo que que 'echo' */
$res = print 'abc'; /* retorna se foi executado com sucesso saída ou não (0 ou 1) Coisa que o echo não faz. */

$x = 2; # Variáveis

if ($x >= 1 && $x < 3) // se a variavel $x for maior ou igual a 1 E menor que 3
{
echo 'Olá mundo!'; // escreve "Olá mundo!"
} else { // Se não.
print('Adeus mundo!'); // escreve 'Adeus mundo!', print pode ser usado com ou sem parênteses.
}

?>

PHP 5
Em junho de 2004 foi lançada a versão 5 do PHP, introduzindo um novo modelo de orientação a objeto, como por exemplo:

Reformulação dos Construtores e adição de Destrutores
O construtor
<?php
class Person {
function __construct() {
print "O construtor é chamado automaticamante quando o objeto é instanciado!";
}
}
?>
O destrutor
<?php
class Person {
function __destruct() {
print "Destruímos o objecto...";
}
}
?>
Visibilidade de acesso
Abstração de objeto
Interfaces de objetos
O tratamento de objetos do PHP foi completamente reescrito, permitindo um desempenho melhor e mais vantagens. Enquanto na versão anterior era preciso muito esforço para atender à orientação a objetos e aos padrões de projectos (alguns não eram possíveis), o PHP 5 veio para sanar essa deficiência. Ainda sofre nesse sentido, contudo, por problemas devido a ser uma linguagem de tipagem fraca.


Indução de tipo
Nesse sentido, foi adicionada uma característica chamada de indução de tipo, de acordo com a qual podemos ter uma certa tipagem quando passamos objetos aos parâmetros de uma função (ou método), algo inconcebível na versão anterior.

Por exemplo:

<?php
class Pessoa
{
// Algum código...
}

// PHP 4
function registraPessoa( $objPessoa )
{
// Algum código...
}

// PHP 5
function registraPessoa( Pessoa $objPessoa )
{
// Algum código...
}


// PHP 4 não dispara erros
registraPessoa( "10" );


// PHP 5 dispara erros!!
registraPessoa( "10" );

// PHP 5 forma correta
registraPessoa( new Pessoa() );

?>


Visibilidade

A visibilidade de uma propriedade ou método pode ser definida com os seguintes modificadores de acesso: public, protected ou private. Itens declarados como públicos podem ser acessados pelo objeto (instância da classe). Membros protegidos estão acessíveis às classes filhas (herdadas). A visibilidade privada limita a apenas a classe que define o atributo ou método.

Por exemplo:

class ClassePai
{
private $atributoPrivado;
protected $atributoProtegido;

public function imprimePai()
{
$this->atributoPrivado = 'Privado';
echo $this->atributoPrivado;
}
}

class ClasseFilha extends ClassePai
{
public $atributoPublico;

public function imprimeFilho()
{
$this->atributoProtegido = 'Protegido';
echo $this->atributoProtegido;

}
}

$obj = new ClasseFilha(); // Instancia a classe
echo $obj->imprimePai(); // Exibe na tela 'Privado'
echo $obj->imprimeFilho(); // Exibe na tela 'Protegido'

// É permitido o acesso pelo objeto aos atributos públicos:
$obj->atributoPublico = 'Sobrenome: Muzzi';
echo $obj->atributoPublico; // Exibe na tela 'Sobrenome: Muzzi'

Outros exemplos
Ler dois valores registrados em variáveis e indicar o maior

<?php
$valor1 = 40;
$valor2 = 20;

if ($valor1 > $valor2) {
echo "A variável $valor1 é maior que a variável $valor2";
} else if ($valor2 > $valor1) {
echo "A variável $valor2 é maior que a variável $valor1";
} else {
echo "A variável $valor1 é igual à variável $valor2";
}
?>
Mostrar na página os dez primeiros números

<?php

//Utilizando WHILE
$valor = 0;

while ($valor < 10) { echo $valor; $valor++; }
?>

<?php

//Utilizando FOR
for ($valor = 0; $valor < 10; $valor++) echo $valor;
?>

<?php

// Utilizando DO ... WHILE

$valor=0;

do{
echo $valor;
$valor++;
}while($valor<10);

?>

Extensões
Extensões do PHP:

Funções de compressão de bzip2
Funções de conversão de Calendar
Funções de ClibPDF
Funções de crack
Família de funções ctype
Biblioteca de rotinas de cliente URL - CURL
Funções de pagamento Cybercash
Funções DBM
Camada de funções de abstração de banco de dados DBA
Funções de dBase
Funções dbx
Funções DOM XML
Funções .NET
Funções EXIF
Funções FrontBase
Funções de formato de dados de formulários (Forms Data Format) FDF.
Funções de filePro
Funções de FTP
Funções da biblioteca de imagens GD
Funções de Gettext
Funções de HyperWave
Conversão de tabela de caracteres ICONV
Funções de Informix
Funções de manuseio de IIS
Funções de IMAP POP3 e NNTP
Funções de Ingres II
Funções de InterBase
Funções de Java
Funções de LDAP
Funções de Multi-Byte String
Funções de Mcrypt Encryption
Funções de Mhash
Funções de Mimetype
Funções de Ming para Flash
Funções de mSQL
Funções de MSSQL
Funções de MySQL
Funções de MySQLi
Funções de Oracle 8
Funções de OpenSSL
Funções de Oracle
Funções de sobrecarga de objectos
Funções de PDF
Funções de PostgreSQL
Funções de impressora
Funções de memória Compartilhada
Funções de get and walk de SNMP
Funções de SOAP
Funções de socket
Funções de Sybase
Funções de Tidy
Funções de Tokenizer
Funções de W32api
Funções de XML-RPC
Funções de XSLT
Funções do YAZ
Funções para Arquivos Zip
Funções de compressão de ZLib