• /

    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.


  • == vs ===

    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:

    • "123" == 123 resulta em true (string vs int, valores iguais)
    • "123" === 123 resulta em false (string !== int)
    • 0 == false é true, mas 0 === false é false

    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.


  • Autoload (manual)

    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.


  • Access Control

    Mecanismo para limitar acesso a recursos ou páginas baseado no estado da sessão ou permissões do usuário autenticado.


  • Authentication

    Processo de verificar identidade do usuário, geralmente através de login com validação de credenciais armazenadas com segurança.


  • Abstração de múltiplas queries sem ORM

    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.


  • __construct()

    Método mágico chamado automaticamente quando um objeto é instanciado. Usado para inicializar propriedades.


  • __call()

    Executado quando é chamado um método inacessível ou inexistente no objeto. Útil para delegação ou interceptação dinâmica.


  • Controller

    Parte do padrão MVC que recebe a requisição, processa a lógica e decide qual resposta enviar.


  • CSRF (Cross-Site Request Forgery)

    Ataque onde um usuário autenticado é induzido a executar ações não autorizadas em uma aplicação web.


  • CSRF Token

    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.


  • CSRF Protection (Manual)

    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.


  • Cuidados ao construir queries dinâmicas

    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.


  • __destruct()

    Método chamado quando um objeto é destruído ou o script termina. Usado para liberar recursos.


  • Dependency Injection

    Padrão para injetar dependências em classes ao invés de criá-las internamente, facilitando testes e manutenção.


  • Dependency inicialização de objetos

    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.


  • debug_backtrace()

    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.


  • error_log()

    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.


  • __get()

    Método invocado quando se acessa uma propriedade inacessível (inexistente ou privada). Permite controle dinâmico de leitura.


  • include

    Inclui um arquivo e continua a execução mesmo se o arquivo não for encontrado (gera warning).


  • include_once

    Inclui o arquivo apenas uma vez, mesmo se chamado múltiplas vezes. Gera warning se falhar, mas continua a execução.


  • Logger

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


  • MVC (Manual PHP Structure)

    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


  • Model

    Parte do MVC que representa dados e regras de negócio, geralmente responsável por interagir com banco de dados.


  • Monolog

    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.


  • Method GET (HTTP)

    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.


  • Method POST (HTTP)

    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.


  • Method PUT (HTTP)

    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.


  • Method DELETE (HTTP)

    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.


  • namespace

    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.


  • Output Escaping

    Uso de funções como htmlspecialchars() para transformar caracteres especiais em entidades HTML, prevenindo execução de scripts.


  • Password Hashing

    Uso de funções como password_hash() e password_verify() para armazenar e validar senhas de forma segura, evitando armazenamento em texto claro.


  • Password Hashing Seguro em PHP

    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 e Prepared Statements

    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.


  • Padrões Service e Repository sem framework

    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.


  • print_r()

    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.


  • PSR-3

    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.


  • public

    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;
    }
    

  • private

    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;
    }
    

  • protected

    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;
    }
    

  • require

    Inclui um arquivo e gera um erro fatal se ele não for encontrado, interrompendo o script.


  • require_once

    Semelhante ao require, mas garante que o arquivo só será incluído uma vez.


  • Routing (Simple PHP Router)

    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.


  • references vs copies

    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.


  • Separação por camadas e responsabilidades (princípio SRP)

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


  • Separação entre lógica de negócio, acesso a dados e views (sem framework)

    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.


  • Session Fixation Prevention

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


  • session_start()

    Função PHP que inicia uma sessão ou retoma a sessão atual, necessária para usar variáveis $_SESSION.


  • Singleton

    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.


  • SQL Injection Prevention (manual)

    Uso de prepared statements para separar comandos SQL de dados, evitando execução de código malicioso enviado pelo usuário.


  • Prepared Statements

    Consultas SQL pré-compiladas com placeholders que recebem parâmetros externos sem alterar a estrutura da query.


  • Input Sanitization

    Processo de limpeza ou validação dos dados recebidos para garantir que não contenham caracteres ou padrões inseguros.


  • Parameter Binding

    Associação segura de variáveis de entrada a placeholders em consultas preparadas para prevenir injeção.


  • Least Privilege Principle

    Configuração do banco para que o usuário tenha apenas as permissões necessárias para executar suas funções, minimizando riscos.


  • Session Timeout

    Configuração para expirar sessões inativas após um período definido, aumentando a segurança e prevenindo acesso indevido.


  • Session Management

    Uso de $_SESSION para armazenar dados persistentes entre requisições, iniciado com session_start() para controlar o estado do usuário.


  • SPL (Standard PHP Library)

    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.


  • Teste de código PHP sem framework

    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.


  • var_dump()

    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

    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.


  • XSS (Cross-Site Scripting)

    Vulnerabilidade onde um atacante injeta scripts maliciosos em páginas vistas por outros usuários.


  • XSS Prevention

    Sanitização e escape rigoroso de qualquer dado enviado pelo usuário antes de exibir na interface (ex: htmlspecialchars em PHP).


  • xdebug

    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.


PHP Questions & Answers

  • What are the main OOP features in PHP?

    The main OOP features in PHP are:

    • Inheritance: Allows a class to inherit properties and methods from a parent class, enabling code reuse and hierarchical relationships.
    • Interfaces: Define a contract that classes must follow by implementing specific methods, ensuring consistent behavior without providing method implementations.
    • Traits: Provide a way to reuse sets of methods across multiple classes without using inheritance, allowing horizontal code reuse.
    • Abstract Classes: Classes that cannot be instantiated on their own and may contain abstract methods that must be implemented by child classes, serving as a base blueprint.

    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
    
                            
    
                            
  • What is the difference between `==` and `===` in PHP?
    `==` checks for equality of value, `===` checks for equality of value and type.
  • How do you handle SQL injection in raw SQL PHP code?
    Always use prepared statements (e.g., via `PDO::prepare`) to bind parameters safely.
  • How do you manage sessions securely in PHP?
    Use `session_regenerate_id()`, secure cookie flags (`httponly`, `secure`), and store minimal info server-side.
  • How does PHP handle memory?
    PHP uses the Zend Memory Manager, which handles dynamic memory allocation via internal functions like emalloc() and efree() (instead of raw malloc()/free()), enabling safe and efficient memory use.
    • Memory is limited per script via memory_limit in php.ini, and can be changed at runtime with ini_set().
    • PHP employs reference counting for variable management. When a variable’s reference count drops to zero, it’s garbage-collected.
    • Garbage Collection (GC) is used for detecting and freeing cyclic references, and can be triggered manually via gc_collect_cycles().
    • Use memory_get_usage() and memory_get_peak_usage() for profiling.
    • With OPcache, compiled scripts are stored in shared memory, improving memory reuse and reducing redundant allocations.
    • Use unset() for large arrays/objects to free memory proactively and avoid memory leaks in long-running scripts (like daemons or workers).
  • What are the main differences between include, require, include_once, and require_once in PHP?
    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.
  • What are magic methods in PHP?
    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.
  • How do I handle large file uploads in native PHP?

    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
    
  • What is the difference between `==` and `===` in PHP?
    `==` checks for equality of value, `===` checks for equality of value and type.