Um hbook para qualquer programador.
Rascunho, links provavelmente estão quebrados.
Que forma mais eficiente de começar senão um guia rápido de como fazer o Hello World mais simples que você imaginar?
Se você é um iniciante corajoso, prepare-se para pesquisar e ler bastante. Colocarei links indicando o caminho sempre que necessário!
Certifique-se de ter a última versão do PHP funcionando legal na sua linha de comando de qualquer sistema operacional desktop e vamos começar.
Crie uma pasta qualquer no seu sistema e nela crie um arquivo index.php
contendo apenas a frase "Olá Alexandre" (troque pelo seu nome!) e, estando naquela pasta pelo terminal, rode php -S localhost:8066
. Ao acessar http://localhost:8066 no navegador, você verá seu nome na tela. Coloque <!doctype html>Olá Alexandre
para impressionar seus amigos com um Hello World válido em HTML5 :P
Esse exemplo, o menor Hello World web do mundo, funciona assim: Ao rodar php -S localhost:alguma_porta
você, através da opção -S
, pediu pro PHP subir um servidor na pasta atual. Esse servidor existe desde a versão 5.4, antes você poderia utilizar o Apache que é simples de instalar em qualquer lugar.
Servidores web ligam várias linguagens de programação utilizando protocolos derivados do CGI à internet. O Apache é robusto e serve para publicar sistemas na web. O -S
do PHP é pra testes locais e simples. Eles são acessados sempre por um IP e uma porta, geralmente a padrão 80. Quando a porta publicada não é padrão, usamos :numero_da_porta
naquela parte da URL. Lembre-se que localhost
sempre aponta para o IP 127.0.0.1
.
Quando a requisição chega no PHP, ele executa o nome como se fosse <?php echo 'Olá Alexandre';
. Tudo que não estava entre tags PHP agia como um echo
.
O que é o PHP senão a primeira e mais popular linguagem criada para desenvolvedores web? Estando na web, o caminho é sempre seguir a modinha tão bem a ponto de aprimorá-la e extrair o melhor das tendências.
Como no dia-a-dia vemos muitas tendências recentes e também muitas tendências de 5 ou 10 anos atrás, cobriremos rapidamente aquelas que dominaram o mercado PHP na última década, com um esforço ininterrupto para tornar esse conhecimento novo e atual.
Esses dominam o software e a web há muito tempo, com devido mérito! SQL é imbatível para o que foi proposto: armazenar e consultar dados que possuem relacionamentos entre si de forma segura.
Esqueça tudo que você conhece sobre bancos de dados no PHP que não for relacionado com a PDO. Se você não conhece a PDO, explicaremos ela aqui:
PHP Data Object é o cara pra mexer com bancos de dados. Consulte php.net/pdo para o suporte a diferentes drivers. Com certeza o MySQL, SQLite e PostgreSQL tem um bom suporte.
Ao contrário da web que possui comunicação uniforme via HTTP, e você deveria agradecer por isso, os bancos de dados comunicam-se por sockets de formas diferentes, estranhas e sem sentido. É isso que a PDO abstrai. Até mesmo para conectar nessa salada não existe um padrão, e aí você precisa ficar atento.
Lembre-se sempre do MySQL e SQLite.
<?php //Estamos em um novo arquivo!
// MySQL
$connection = new PDO('mysql:host=my.db.host;dbname=mydb', 'myuser', 'mypass');
// ...ou SQLite com caminho de arquivo relativo ao diretório atual ou absoluto.
$connection = new PDO('sqlite:path_to_file.sq3');
// ...ou SQLite em memória. Use esse para prosseguir!
$connection = new PDO('sqlite::memory:');
Agora, se você precisa de um banco de dados que tem suporte medíocre pela PDO, consulte a documentação e resolva a parte não-pragmática e procure uma solução pronta que já abstraia esse problema, como o Doctrine.
Um pouco antes de usar essa $connection
vamos aprender tudo que você precisa pra desenvolver usando qualquer banco de dados moderno: um pedaço do padrão SQL92. É o último que todos os bancos de dados respeitam.
// ...continuando
$connection->exec('
CREATE TABLE author (
id INT PRIMARY KEY,
name VARCHAR(32) NOT NULL
)
');
// ...coloque todos esses abaixo também no arquivo!
$connection->exec('
CREATE TABLE article (
id INT PRIMARY KEY,
published DATETIME,
title VARCHAR(32) NOT NULL,
author_id INT NOT NULL REFERENCES author(id)
)
');
$connection->exec('
CREATE TABLE category (
id INT PRIMARY KEY,
name VARCHAR(32) NOT NULL
)
');
$connection->exec('
CREATE TABLE article_category (
id INT PRIMARY_KEY,
article_id INT NOT NULL REFERENCES article(id),
category_id INT NOT NULL REFERENCES category(id),
UNIQUE (article_id, category_id)
)
');
O método $connection->exec()
executa comandos diretamente no banco de dados. Se você não conhece orientação à objetos, prazer: $connection
é um objeto que você instanciou (criou) com new PDO(...
e exec()
é um método (algo que esse objeto faz). OOP é basicamente isso, focada em organização de código.
Se você não sabe os comandos SQL acima, procure o manual do SQLite ou do MySQL e lembre-se: de tudo listado lá, a única coisa que funciona em praticamente todos os bancos de dados é o listado neste guia.
Abriremos uma única exceção: chaves que se auto-incrementam. Da moda dos bancos de dados, uma possível evolução talvez tenham sido os IDs em bancos de dados. A integração com sistemas, principalmente os orientados à objetos, torna-se mais simples com eles:
- MySQL:
id INT PRIMARY KEY AUTO_INCREMENT
- SQLite:
id INTEGER PRIMARY KEY
Crie sempre tabelas em inglês, no singular e use um padrão bem definido de nomes de chaves primárias, chaves estrangeiras e colunas que muitas tabelas possuem em comum. Se você não sabe como funcionam as chaves, estude esse importante assunto. Consulte o manual do banco que você usa. O padrão que usei acima é simples:
- Toda tabela deve ter como primeiro campo uma chave primária chamada
id
, auto-incrementada. - Chaves estrangeiras deve ter seu nome composto do nome da tabela seguido de
_id
. - Tabelas N-para-N devem ter seu nome composto dos nomes das duas tabelas em ordem de importância separados por
_
.
Se você rodou esse arquivo, até agora, provavelmente não viu nada acontecer. Só estamos configurando a conexão e criando algumas tabelas, agora vamos inserir alguns dados:
Boa, material em português de qualidade é difícil de encontrar. Só de acessar o banco com PDO é um avanço.
Se tivesse um sumário eu podeira ajudar.