/** * Generate a hash value to simplify the comparison of this data * container with other containers. Subdata is taken into account. * * The hash uses PHP's md5 implementation, which is among the fastest * hash algorithms that PHP offers. * * @note This function may be used to obtain keys for SemanticData * objects or to do simple equalitiy tests. Equal hashes with very * high probability indicate equal data. However, the hash is * sensitive to the order of properties and values, so it does not * yield a reliable way to detect inequality: objects with different * hashes may still contain the same data, added in different order. * * @return string */ public function getHash() { $stringToHash = ''; // here and below, use "_#_" to separate values; really not much care needed here $stringToHash .= '_#_' . $this->mSubject->getSerialization(); foreach ($this->getProperties() as $property) { $stringToHash .= '_#_' . $property->getKey() . '##'; foreach ($this->getPropertyValues($property) as $di) { $stringToHash .= '_#_' . $di->getSerialization(); } $stringToHash = md5($stringToHash); // intermediate hashing to safe memory } foreach ($this->getSubSemanticData() as $data) { $stringToHash .= '#' . $data->getHash(); } return md5($stringToHash); }
/** * Generate a hash value to simplify the comparison of this data * container with other containers. The hash uses PHP's md5 * implementation, which is among the fastest hash algorithms that * PHP offers. * * @return string */ public function getHash() { $ctx = hash_init('md5'); // here and below, use "_#_" to separate values; really not much care needed here hash_update($ctx, '_#_' . $this->mSubject->getSerialization()); foreach ($this->getProperties() as $property) { hash_update($ctx, '_#_' . $property->getKey() . '##'); foreach ($this->getPropertyValues($property) as $di) { hash_update($ctx, '_#_' . $di->getSerialization()); } } return hash_final($ctx); }