example - ¿Cómo encontrar Object ID en PHP?
wp_nav_menu wordpress (3)
Actualmente no hay forma de hacerlo en PHP, a partir de la versión 5.3.6.
spl_object_hash () no hace lo que quieres, ya que recicla los identificadores cuando los objetos se eliminan, esto dará lugar a errores en (por ejemplo) un mapeador relacional de objetos que intenta hacer un seguimiento de los objetos en una sesión.
La descripción en la parte superior de la página de documentación ("Esta función devuelve un identificador único para el objeto. Esta identificación se puede usar como una clave hash para almacenar objetos o para identificar un objeto.") Es incorrecta: la verdad se revela en nota en esa página: "Cuando un objeto es destruido, su hash puede ser reutilizado para otros objetos", o en otras palabras, la función no siempre devuelve un identificador único, y no siempre se puede utilizar para almacenar o identificar objetos.
La técnica demostrada en este comentario puede funcionar en algunos casos, pero no es confiable y tampoco funcionará de manera consistente, ya que intentar acceder a una propiedad indefinida invocará los métodos mágicos __get () y __set (), cuyos resultados son impredecibles.
En conclusión, la respuesta corta a su pregunta (desafortunadamente) es "no" - no existe tal método en PHP, y no hay forma de escribir un método como este que funcione de manera consistente para cualquier objeto.
Si desea ver esta característica agregada a PHP, vote y / o comente aquí:
Estoy usando PHP 5.2. Me gustaría encontrar una manera de generar un ID único para cada objeto, por lo que es fácil cuando reviso los registros para ver qué objetos son iguales.
En Ruby, solo diría object.object_id para obtener el identificador interno de Ruby para el objeto. No parece haber una manera obvia de hacer esto en PHP.
¿Hay una forma incorporada de hacer esto? Si no lo hay, ¿puedes ofrecer alguna otra sugerencia?
Sé que este es un tema viejo, pero creo que encontré una solución.
El truco está en almacenar la referencia a cada objeto en la matriz con la tecla asignada. A continuación, puede obtener el Id. De objeto buscando a través de esa matriz y devolviendo la clave encontrada.
<?php
class objectMarker
{
private $storage;
function add($object) {
$this->storage[] = $object;
}
function getId($object) {
foreach ($this->storage as $id => $item) {
if ($item === $object) {
return $id;
}
}
return null;
}
}
$marker = new objectMarker;
$t1 = new stdClass;
$t2 = new stdClass;
$marker->add($t1);
$marker->add($t2);
echo $marker->getId($t1) . "/n";
echo $marker->getId($t2) . "/n";
unset($t1);
$t1 = new stdClass;
$marker->add($t1);
echo $marker->getId($t1) . "/n";
$t2->x = 1;
echo $marker->getId($t2) . "/n";
/* output:
0
1
2
1
*/
Use spl_object_hash()
para eso.
Devuelve un identificador único para cada instancia de objeto, y no el nombre de la clase, por lo que parece más adecuado para usted.
Editar:
Para usuarios de PHP <5.2.x, vea esta respuesta .