instanceof în PHP

Verifică dacă un obiect este de o anumită clasă, extinde acea clasă sau implementează o interfață.

Sintaxă
$obiect instanceof NumeClasa

Ce face instanceof

instanceof returnează true dacă obiectul din stânga este o instanță a clasei din dreapta, a unei clase care o extinde sau implementează interfața din dreapta.

Dacă în stânga nu este un obiect (de exemplu null sau un text), rezultatul este pur și simplu false, fără eroare. Numele clasei poate fi dat și printr-o variabilă care conține textul numelui.

Exemple

Exemplul 1: Clasă, părinte și interfață

<?php
interface Platibil {}
class Document {}
class Factura extends Document implements Platibil {}

$f = new Factura();

var_dump($f instanceof Factura);
var_dump($f instanceof Document);
var_dump($f instanceof Platibil);
var_dump($f instanceof DateTime);

Rezultat

bool(true)
bool(true)
bool(true)
bool(false)

Exemplul 2: Comportament diferit după tip

<?php
function descrie(mixed $valoare): string
{
    if ($valoare instanceof DateTimeInterface) {
        return "Dată: " . $valoare->format("d.m.Y");
    }
    if ($valoare instanceof Countable) {
        return "Colecție cu " . count($valoare) . " elemente";
    }
    return "Altceva: " . get_debug_type($valoare);
}

echo descrie(new DateTimeImmutable("2026-12-01")) . "\n";
echo descrie(new ArrayObject([1, 2, 3])) . "\n";
echo descrie(null);

Rezultat

Dată: 01.12.2026
Colecție cu 3 elemente
Altceva: null

Greșeli frecvente

  • Pui numele clasei între ghilimele direct: $x instanceof "Factura" este eroare de sintaxă. Scrie numele fără ghilimele sau folosește o variabilă: $clasa = "Factura"; $x instanceof $clasa.
  • Verifici tipul cu get_class($x) === "Document". Asta nu recunoaște clasele copil. instanceof ține cont de moștenire.

Comenzi înrudite

  • is_a / is_subclass_of: Verifică dacă un obiect este de o clasă sau o moștenește (is_a). is_subclass_of exclude clasa însăși.
  • get_class / get_parent_class: Returnează numele clasei unui obiect (get_class) sau numele clasei părinte (get_parent_class).
  • interface / implements: O interfață este o listă de metode pe care o clasă promite să le aibă. Clasa le scrie cu implements.
  • extends / parent::: Creează o clasă nouă pornind de la una existentă (moștenire). Clasa copil primește tot ce are părintele.