class
Aprenda como a palavra-chave class em PHP define classes: propriedades, métodos, construtores, visibilidade, constantes, membros estáticos e herança com exemplos.
A Palavra-chave class em PHP
A palavra-chave class define uma classe — um modelo que descreve os dados (propriedades) e o comportamento (métodos) compartilhados por um grupo de objetos. Em seguida, você cria objetos individuais (também chamados de instâncias) a partir desse modelo com o operador new. As classes são a base da programação orientada a objetos (POO) em PHP: elas permitem agrupar estado e lógica relacionados em uma única unidade reutilizável, em vez de espalhar variáveis e funções avulsas.
Esta página aborda como declarar uma classe, adicionar propriedades e métodos, inicializar objetos com um construtor, controlar o acesso com modificadores de visibilidade, compartilhar dados com constantes e membros estáticos, e reutilizar comportamento por meio de herança.
Sintaxe
Uma declaração de classe começa com a palavra-chave class, seguida de um nome e um corpo entre chaves:
<?php
class MyClass {
// Properties and methods go here
}Por convenção, nomes de classes usam PascalCase (MyClass, BankAccount). Um nome de classe não pode ser uma palavra reservada do PHP, e o corpo — mesmo que vazio — deve usar chaves. Definir uma classe não faz nada por si só; ela só se torna útil quando você cria um objeto a partir dela.
Propriedades e métodos
Uma propriedade é uma variável que pertence a um objeto. Um método é uma função que pertence a uma classe. Dentro de um método, a variável especial $this refere-se ao objeto atual, portanto $this->name lê (ou escreve) a propriedade name desse objeto:
<?php
class User {
public string $name; // a property
public function greet(): string { // a method
return "Hi, I'm {$this->name}";
}
}
$u = new User();
$u->name = "Ada"; // set the property on this object
echo $u->greet(); // Hi, I'm AdaObserve o operador -> (não .) para acessar membros, e que você escreve $this->name, nunca $this->$name.
O construtor
Definir cada propriedade manualmente é verboso e sujeito a erros. O método __construct() é executado automaticamente quando um objeto é criado, permitindo que você exija e atribua valores iniciais em uma única etapa. Os argumentos que você passa para new são encaminhados para o construtor:
<?php
class Car
{
public $make;
public $model;
public $year;
public function __construct($make, $model, $year)
{
$this->make = $make;
$this->model = $model;
$this->year = $year;
}
public function describe(): string
{
return "{$this->year} {$this->make} {$this->model}";
}
}
$myCar = new Car("Ford", "Mustang", 2022);
echo $myCar->describe(); // 2022 Ford MustangVeja construtor PHP para mais detalhes, incluindo a promoção de propriedades no construtor.
Visibilidade
Cada propriedade e método tem uma visibilidade que controla onde pode ser acessado:
public— acessível de qualquer lugar (o padrão se você omitir).protected— acessível apenas dentro da classe e suas subclasses.private— acessível apenas dentro da classe que o declara.
Ocultar o estado interno com private e expô-lo por meio de métodos é chamado de encapsulamento:
<?php
class BankAccount
{
private float $balance = 0; // cannot be touched directly from outside
public function deposit(float $amount): void
{
$this->balance += $amount;
}
public function getBalance(): float
{
return $this->balance;
}
}
$acc = new BankAccount();
$acc->deposit(100);
echo $acc->getBalance(); // 100Mais detalhes em modificadores de acesso PHP.
Constantes e membros estáticos
Use a palavra-chave const para valores que nunca mudam e a palavra-chave static para dados e métodos que pertencem à própria classe, e não a um objeto específico. Ambos são acessados com o operador de resolução de escopo :::
<?php
class Circle
{
const PI = 3.14159; // class constant
public static int $count = 0; // shared across all instances
public function __construct()
{
self::$count++; // increment the shared counter
}
}
new Circle();
new Circle();
echo Circle::PI; // 3.14159
echo PHP_EOL;
echo Circle::$count; // 2Veja constantes de classe PHP e métodos estáticos PHP.
Herança
Uma classe pode extends outra para reutilizar e especializar seu comportamento. A classe filha herda as propriedades e métodos da classe pai, e pode substituí-los:
<?php
class Animal
{
public function speak(): string
{
return "The animal makes a sound.";
}
}
class Dog extends Animal
{
public function speak(): string // overrides the parent method
{
return "The dog barks.";
}
}
echo (new Animal())->speak(); // The animal makes a sound.
echo PHP_EOL;
echo (new Dog())->speak(); // The dog barks.Para uma cobertura mais aprofundada, veja herança PHP, e para classes que definem um contrato sem implementação, classes abstratas e interfaces.
Exemplo completo
O exemplo executável a seguir combina um construtor com métodos getter e demonstra herança com substituição de método:
<?php
// Example 1
class Car
{
public $make;
public $model;
public $year;
public function __construct($make, $model, $year)
{
$this->make = $make;
$this->model = $model;
$this->year = $year;
}
public function getMake()
{
return $this->make;
}
public function getModel()
{
return $this->model;
}
public function getYear()
{
return $this->year;
}
}
$myCar = new Car("Ford", "Mustang", 2022);
echo "Make: " . $myCar->getMake() . PHP_EOL;
echo "Model: " . $myCar->getModel() . PHP_EOL;
echo "Year: " . $myCar->getYear() . PHP_EOL;
// Output:
// Make: Ford
// Model: Mustang
// Year: 2022
// Example 2
class Animal
{
public function speak()
{
echo "The animal speaks.";
}
}
class Dog extends Animal
{
public function speak()
{
echo "The dog barks.";
}
}
$myAnimal = new Animal();
$myDog = new Dog();
$myAnimal->speak();
$myDog->speak();
// Output:
// The animal speaks.
// The dog barks.O Exemplo 1 constrói objetos com um construtor e lê seu estado por meio de getters; o Exemplo 2 mostra uma subclasse Dog substituindo o método speak() herdado de Animal.
Resumo
- A palavra-chave
classdefine um modelo; o operadornewcria objetos a partir dele. - Propriedades armazenam os dados de um objeto, métodos definem seu comportamento, e
$thisrefere-se ao objeto atual dentro de um método. __construct()inicializa um objeto no momento em que é criado.public,protectedeprivatecontrolam onde os membros podem ser acessados.constestaticpertencem à própria classe; acesse-os com::.extendspermite que uma classe herde e substitua o comportamento de outra.
Para uma visão mais ampla de como essas peças se encaixam, veja classes e objetos PHP.