Variáveis

camelCase para variáveis normais e parâmetros de funções/métodos:

$id
$name
$usuarios
$usuario
$data

Arrays sempre com array():

$usuarios = array();

Funções e métodos

Nomes em camelCase:

function getUsers(): array { ... }
public function createUser(array $data): array { ... }

Métodos de classes seguem a mesma convenção.
Funções e métodos curtos e com responsabilidade única.

Classes

Nomes em PascalCase:

class UserService { ... }
class UserDAO { ... }

Propriedades de uma classe em camelCase:

private UserDAO $dao;

Controle de fluxo

Chaves na mesma linha da declaração (estilo C-like):

if ($id !== 0) {
}

Condicionais: primeiro o caso positivo, depois o falso:

if ($id !== 0) {
    echo json_encode(getUserById($id));
} else {
    echo json_encode(getUsers());
}

Comparações estritas === e !== em condicionais relevantes.

Casting

Somente quando necessário, principalmente para entradas externas ou retornos:

$id = (int) $_GET["id"];
return array("id" => (int)$id, "name" => $name);

Estilo geral

Sintaxe clássica e explícita, sem atalhos nem abreviações (?:, ??).
Indentação e chaves consistentes, estilo C-like.
Variáveis descritivas e funções/métodos de responsabilidade única.
Uso estrito de type hints em parâmetros e declarações de retorno.
Retornos sempre de um único tipo, sem ambiguidade (exemplo: sempre array, nunca array|false|null).