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.