spl_object_id în PHP

Returnează un număr unic care identifică un obiect, cât timp acel obiect există.

Sintaxă
spl_object_id(object $object): int

Ce face spl_object_id

Fiecare obiect are un număr intern. Două variabile care arată spre același obiect dau același id, iar o copie făcută cu clone are alt id. Id-ul poate fi refolosit după ce obiectul este distrus, deci nu îl salva pe termen lung.

Este util ca cheie într-un tablou când vrei să ții evidența obiectelor deja procesate. Pentru o colecție de obiecte există și clasa SplObjectStorage.

Parametri

Parametru Descriere
$object Obiectul.

Ce returnează

Id-ul obiectului, ca număr întreg.

Exemple

Exemplul 1: Același obiect sau altul

<?php
$a = new stdClass();
$b = $a;
$c = clone $a;

var_dump(spl_object_id($a) === spl_object_id($b));
var_dump(spl_object_id($a) === spl_object_id($c));

Rezultat

bool(true)
bool(false)

Exemplul 2: Evitarea procesării duble

<?php
class Comanda { public function __construct(public int $nr) {} }

$c1 = new Comanda(1);
$c2 = new Comanda(2);
$deTrimis = [$c1, $c2, $c1];

$trimise = [];
foreach ($deTrimis as $comanda) {
    if (isset($trimise[spl_object_id($comanda)])) {
        continue;
    }
    $trimise[spl_object_id($comanda)] = true;
    echo "Trimit comanda $comanda->nr\n";
}

Rezultat

Trimit comanda 1
Trimit comanda 2

Greșeli frecvente

  • Salvezi id-ul în baza de date sau în sesiune. La următoarea cerere, aceleași numere sunt date altor obiecte.

Comenzi înrudite

  • spl_object_hash: Returnează un text unic care identifică un obiect, cât timp acel obiect există.
  • clone: Creează o copie a unui obiect. Fără clone, atribuirea unui obiect copiază doar referința către același obiect.
  • == / === / != / <=>: Compară două valori. == compară valoarea după conversie, === compară și tipul, <=> spune care e mai mare.