уникальный идентификатор переменной (например, spl_object_hash)

#php

#php

Вопрос:

Возможно ли получить уникальный идентификатор скалярной / массивной переменной в PHP5.3 Что-то вроде хэша объекта для объектов. Например, у меня есть:

 $a = array(1, 2, 3);
$b = amp;$a;
  

таким образом, уникальный идентификатор для переменных $ a и $ b должен быть одинаковым, возможно, извлеченным из указателя памяти.
Я не нашел никакой альтернативной функции spl_object_hash .

Комментарии:

1. PHP не использует указатели на память. В лучшем случае вы могли бы сделать что-то вроде md5(serialize($a)) получения подписи, но это не позволило бы вам различать два отдельных массива, которые имеют одинаковое содержимое.

2. Я думаю, что PHP имеет внутренние указатели на память в справочной таблице. Итак, я искал некоторые идентификаторы, полученные из них. Я не могу использовать хэш данных. Две переменные (где первая не является ссылкой на вторую) могут иметь одинаковое значение.

3. Да, внутри он имеет стандартные указатели C / C , но они не отображаются на уровне скрипта.

4. Имейте в виду, что копирование PHP при записи может привести к неправильным результатам: $ a = $ b по-прежнему использует то же местоположение памяти (то же самое с параметрами функции и т. Д.) Так что это было бы довольно вводящим в заблуждение. Добавление такой вещи из пользовательского расширения PHP возможно, но PHP не предлагает собственный способ.

5. Ах, и еще одна мысль: благодаря тому, как движок обрабатывает временные переменные, константы и «скомпилированные переменные», адрес может быть глобально уникальным не более, чем текущий вызов функции

Ответ №1:

небольшое обходное решение:

 function unique_var($var) {
    return md5(serialize($var));
}
  

Комментарии:

1. Единственная проблема с этим заключается в том, что он не может различать две разные переменные с одинаковым значением, что, я думаю, вероятно, требуется здесь.

2. Не уверен, что нужно различать отдельные массивы. Он сказал, что уникальный идентификатор для $a и $b должен быть одинаковым; что было бы с использованием техники Питера. Но, конечно, я мог бы создать еще один новый массив с теми же данными и получить тот же хэш, что может быть тем, что вы имеете в виду.

3. Точно, мне нужен уникальный идентификатор вместо хэша данных из-за той же проблемы со значением. Извините, мой ответ был не таким точным.