In PHP, a leading backslash before a class name forces resolution from the global namespace. Without it, PHP first looks for the class in the current namespace, which can lead to errors if a class isn't explicitly imported or defined there.
O operador == compara apenas os valores, permitindo conversão de tipos (type juggling). Já o operador === compara valor e tipo, exigindo correspondência exata.
Exemplos:
Recomenda-se sempre o uso de === para garantir comparações seguras e previsíveis, evitando bugs e comportamentos inesperados em lógicas críticas como autenticação, validação e verificação de null.
Técnica para carregar classes automaticamente em tempo de execução usando spl_autoload_register(). Evita múltiplos require/include. Permite mapear nomes de classes para arquivos dinamicamente, útil em projetos pequenos ou sem Composer.
Mecanismo para limitar acesso a recursos ou páginas baseado no estado da sessão ou permissões do usuário autenticado.
Processo de verificar identidade do usuário, geralmente através de login com validação de credenciais armazenadas com segurança.
Organização do acesso a dados usando classes Repository que encapsulam queries SQL raw ou PDO, separando a lógica de consulta do restante da aplicação. Cada método do Repository executa uma query específica, retornando arrays ou objetos simples. Isso permite reuso, testabilidade e manutenção, sem a complexidade ou overhead de um ORM completo.
Método mágico chamado automaticamente quando um objeto é instanciado. Usado para inicializar propriedades.
Executado quando é chamado um método inacessível ou inexistente no objeto. Útil para delegação ou interceptação dinâmica.
Parte do padrão MVC que recebe a requisição, processa a lógica e decide qual resposta enviar.
Ataque onde um usuário autenticado é induzido a executar ações não autorizadas em uma aplicação web.
Token único e secreto gerado no servidor, inserido em formulários e verificado no envio para garantir que a requisição veio do usuário legítimo.
Gerar um token único na sessão, incluí-lo como campo oculto em formulários, e validar esse token no backend antes de processar dados.
Evitar SQL Injection usando sempre prepared statements com parâmetros vinculados, nunca concatenar diretamente variáveis na query. Validar e sanitizar entradas, evitar lógica condicional complexa dentro da query e preferir duplicar queries simples em vez de usar muitos IFs na SQL. Manter a query legível e com desempenho controlado.
Método chamado quando um objeto é destruído ou o script termina. Usado para liberar recursos.
Padrão para injetar dependências em classes ao invés de criá-las internamente, facilitando testes e manutenção.
Gerenciamento manual ou via container simples para criar e injetar dependências em objetos, garantindo baixo acoplamento. Pode ser feito com fábricas (factories), injeção via construtor (constructor injection) e uso cuidadoso de singletons ou service locators para facilitar teste e manutenção.
Função que retorna o stack trace da execução atual, útil para entender a origem de chamadas de função. Ferramenta poderosa de diagnóstico em ambientes de desenvolvimento.
Função que envia mensagens de erro personalizadas para o log do servidor. Ideal para registrar erros sem exibir ao utilizador. Deve ser preferida a var_dump() em produção.
Método invocado quando se acessa uma propriedade inacessível (inexistente ou privada). Permite controle dinâmico de leitura.
Inclui um arquivo e continua a execução mesmo se o arquivo não for encontrado (gera warning).
Inclui o arquivo apenas uma vez, mesmo se chamado múltiplas vezes. Gera warning se falhar, mas continua a execução.
Componente ou classe responsável por registrar mensagens, erros, e eventos durante a execução da aplicação. Em sistemas PHP modernos, um Logger substitui funções de debug como var_dump() e echo, permitindo controlar nível de severidade (info, warning, error, etc.) e destino dos logs (arquivo, email, syslog...).
Arquitetura que separa a aplicação em três camadas: Model (dados e lógica), View (interface, HTML) e Controller (recebe requisição, manipula dados e retorna resposta). Manualmente, organiza pastas e scripts para manter código limpo e modular
Parte do MVC que representa dados e regras de negócio, geralmente responsável por interagir com banco de dados.
Biblioteca padrão de logging no ecossistema PHP, amplamente utilizada com ou sem frameworks. Permite registrar logs em múltiplos formatos (arquivo, banco, e-mail, Slack, etc.) com níveis configuráveis (debug, info, warning, error...). Integrável com PSR-3, sendo robusta e extensível.
Método HTTP usado para obter dados do servidor. Os parâmetros são enviados na URL e acessados via $_GET. Não deve alterar o estado do sistema. Ideal para buscas, filtros ou navegação segura.
Método HTTP usado para enviar dados ao servidor, normalmente para criar ou processar recursos. Os dados vêm no corpo da requisição e são acessados via $_POST e $_FILES. Requer validação para prevenir CSRF e XSS.
Método HTTP usado para atualizar dados existentes. Em PHP nativo, os dados não são acessíveis via $_POST e precisam ser lidos com file_get_contents('php://input'). Requer parsing manual e validação cuidadosa.
Método HTTP usado para remover recursos. Assim como o PUT, os dados são lidos via php://input. A operação deve ser protegida contra chamadas indevidas (CSRF) e validada com autorização forte.
Namespaces in PHP provide a way to encapsulate and organize code by grouping related classes, interfaces, functions, and constants under a unique identifier. This prevents naming collisions between code from different libraries or modules, allowing multiple components to coexist without conflicts. Namespaces also improve code readability and maintainability by clearly defining the scope of each element.
Uso de funções como htmlspecialchars() para transformar caracteres especiais em entidades HTML, prevenindo execução de scripts.
Uso de funções como password_hash() e password_verify() para armazenar e validar senhas de forma segura, evitando armazenamento em texto claro.
A forma mais segura de armazenar senhas é usando a função password_hash() nativa do PHP, que aplica algoritmos de hashing fortes (como bcrypt ou Argon2) com salt automático e parâmetros ajustáveis para resistência a ataques de força bruta. Para verificar a senha, usa-se password_verify(). Nunca armazene senhas em texto puro ou com hashes simples como MD5/SHA1.
PDO (PHP Data Objects) é uma extensão para acesso ao banco que suporta múltiplos bancos de dados e oferece uma interface orientada a objetos. Prepared statements são consultas SQL pré-compiladas com placeholders para parâmetros, que são preenchidos de forma segura na execução, prevenindo SQL Injection. Usar PDO com prepared statements garante segurança ao manipular dados externos, melhor desempenho em consultas repetidas e tratamento robusto de erros.
Organização do código em camadas separadas: o padrão Repository isola acesso a dados (consultas SQL, PDO), enquanto o Service encapsula a lógica de negócio que utiliza um ou mais Repositories. Essa separação facilita manutenção, testes, e reduz acoplamento, mesmo sem usar frameworks.
Função que imprime uma representação legível de arrays ou objetos. Mais legível que var_dump(), mas menos detalhada. Usada em debug rápido, nunca deve permanecer em produção.
Recomendação da PHP-FIG que define uma interface padrão para bibliotecas de logging (Psr\Log\LoggerInterface). Garante que qualquer sistema ou biblioteca que implemente essa interface possa ser facilmente substituído ou integrado com loggers como Monolog, promovendo interoperabilidade e desacoplamento no código.
Modificador de visibilidade que permite o acesso irrestrito ao membro (método ou propriedade) de uma classe. Pode ser acessado de qualquer lugar: dentro da classe, por instâncias externas e por classes filhas.
Exemplo:
class Exemplo {
public string $nome;
}
Modificador de visibilidade que restringe o acesso ao membro apenas dentro da própria classe onde foi definido. Nem mesmo classes filhas podem acessá-lo.
Exemplo:
class Exemplo {
private string $senha;
}
Modificador de visibilidade que permite o acesso ao membro dentro da própria classe e também em classes que a estendem (herança). Não pode ser acessado diretamente por instâncias externas.
Exemplo:
class Exemplo {
protected string $email;
}
Inclui um arquivo e gera um erro fatal se ele não for encontrado, interrompendo o script.
Semelhante ao require, mas garante que o arquivo só será incluído uma vez.
Sistema que mapeia URLs e métodos HTTP para funções ou controladores específicos sem usar frameworks. Permite controlar quais códigos executam em cada endpoint, usando arrays associativos e verificação da requisição para decidir a resposta.
In PHP, a copy means duplicating the value of a variable into a new memory location, so changes to one do not affect the other. A reference means two variables point to the same memory location, so changes to one variable reflect in the other. References are created using the & operator and are useful for efficiency and sharing data, but can introduce side effects if not managed carefully.
Arquitetura que organiza o projeto PHP em camadas com responsabilidade única: public/ (entrada e arquivos públicos), src/ (Controller, Model, View, Service, Repository, Middleware), config/ (configurações), var/ (logs e cache), vendor/ (dependências), tests/ (testes).
Organização do código PHP em camadas claras para facilitar manutenção: Service (regras da aplicação), Repository/Model (acesso ao banco com SQL/PDO), View (templates para exibir dados). Controllers coordenam chamadas, mantendo código desacoplado e testável.
Técnica para evitar que IDs de sessão sejam roubados, geralmente renovando o ID da sessão após login com session_regenerate_id().
Função PHP que inicia uma sessão ou retoma a sessão atual, necessária para usar variáveis $_SESSION.
Padrão de projeto que garante que uma classe tenha apenas uma única instância durante a execução do programa, fornecendo um ponto global de acesso a essa instância. Útil para gerenciar recursos compartilhados, mas deve ser usado com cuidado para evitar acoplamento rígido e dificuldades em testes.
Uso de prepared statements para separar comandos SQL de dados, evitando execução de código malicioso enviado pelo usuário.
Consultas SQL pré-compiladas com placeholders que recebem parâmetros externos sem alterar a estrutura da query.
Processo de limpeza ou validação dos dados recebidos para garantir que não contenham caracteres ou padrões inseguros.
Associação segura de variáveis de entrada a placeholders em consultas preparadas para prevenir injeção.
Configuração do banco para que o usuário tenha apenas as permissões necessárias para executar suas funções, minimizando riscos.
Configuração para expirar sessões inativas após um período definido, aumentando a segurança e prevenindo acesso indevido.
Uso de $_SESSION para armazenar dados persistentes entre requisições, iniciado com session_start() para controlar o estado do usuário.
SPL is a built-in PHP library providing standard data structures, iterators, exceptions, and utility functions. It includes classes like ArrayIterator, SplStack, SplQueue, and supports efficient class autoloading via spl_autoload_register(). Using SPL improves code readability, reduces boilerplate, and offers tested implementations for common programming tasks such as traversing collections, handling files, and managing data structures.
Testes manuais ou scripts simples em PHP que verificam funções e métodos isoladamente, usando asserts básicos. Organização de casos de teste em arquivos separados, executados via CLI. Para maior controle, criar funções utilitárias que automatizam a execução e validação de resultados. É possível usar PHPUnit standalone, mas sem integração automática.
Função de debug do PHP que exibe informações detalhadas sobre uma ou mais variáveis, incluindo tipo e valor. Útil para inspecionar estruturas complexas (arrays, objetos). Deve ser evitada em produção.
Variable scope defines the context within a program where a variable is accessible. In PHP, scopes include global, local (within functions or methods), static, and superglobals. Proper understanding of scope is essential to avoid unintended side effects, manage memory, and maintain clean, predictable code.
Vulnerabilidade onde um atacante injeta scripts maliciosos em páginas vistas por outros usuários.
Sanitização e escape rigoroso de qualquer dado enviado pelo usuário antes de exibir na interface (ex: htmlspecialchars em PHP).
Extensão poderosa de debug para PHP, permitindo breakpoints, stack traces, profiling e integração com IDEs. Essencial para debugging profissional em ambientes de desenvolvimento.
The main OOP features in PHP are:
Practical Example
// Inheritance: base class Vehicle
class Vehicle {
public function start() {
return "Vehicle starting";
}
}
// Child class inherits from Vehicle
class Car extends Vehicle {
public function start() {
return "Car starting";
}
}
// Interface: defines a contract for electric vehicles
interface Electric {
public function chargeBattery();
}
// Trait: reusable method for logging
trait Logger {
public function log($msg) {
echo "Log: $msg\n";
}
}
// Abstract class: requires child classes to implement move()
abstract class MotorVehicle {
abstract public function move();
}
// Class implementing interface, using trait, and extending abstract class
class ElectricCar extends MotorVehicle implements Electric {
use Logger;
public function move() {
return "Electric car moving";
}
public function chargeBattery() {
$this->log("Battery charging");
return "Charging battery";
}
}
// Usage
$car = new Car();
echo $car->start() . "\n"; // Car starting
$electricCar = new ElectricCar();
echo $electricCar->move() . "\n"; // Electric car moving
echo $electricCar->chargeBattery() . "\n"; // Log: Battery charging \n Charging battery
| Function | Behavior if File Missing | Multiple Inclusions |
|---|---|---|
include |
Emits a warning, script continues. | Allows multiple inclusions. |
require |
Emits a fatal error, script stops. | Allows multiple inclusions. |
include_once |
Emits a warning, continues. | Includes only once, even if called again. |
require_once |
Emits fatal error, stops. | Includes only once. |
| Magic Method | Triggered When... |
|---|---|
__construct() |
An object is instantiated. |
__destruct() |
An object is destroyed or script ends. |
__get($name) |
Reading an inaccessible or undefined property. |
__set($name, $value) |
Writing to an inaccessible or undefined property. |
__isset($name) |
Using isset() or empty() on an inaccessible property. |
__unset($name) |
Using unset() on an inaccessible property. |
__call($name, $args) |
Calling an inaccessible or undefined object method. |
__callStatic($name, $args) |
Calling an inaccessible or undefined static method. |
__toString() |
Object is treated as a string (e.g., echo $obj). |
__invoke() |
Object is used like a function (e.g., $obj()). |
__clone() |
Object is cloned using clone. |
__sleep() / __wakeup() |
During serialize() / unserialize(). |
__debugInfo() |
When var_dump() is called on the object. |
1. Configure PHP settings in php.ini:
upload_max_filesize = 200M
post_max_size = 210M
max_execution_time = 300
max_input_time = 300
memory_limit = 512M