Exemplo n.º 1
0
 /**
  * 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);
 }
Exemplo n.º 2
0
 /**
  * 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 equality tests. Equal hashes with very
  * high probability indicate equal data.
  *
  * @return string
  */
 public function getHash()
 {
     if ($this->hash !== null) {
         return $this->hash;
     }
     $hash = array();
     $hash[] = $this->mSubject->getSerialization();
     foreach ($this->getProperties() as $property) {
         $hash[] = $property->getKey();
         foreach ($this->getPropertyValues($property) as $di) {
             $hash[] = $di->getSerialization();
         }
     }
     foreach ($this->getSubSemanticData() as $data) {
         $hash[] = $data->getHash();
     }
     sort($hash);
     $this->hash = md5(implode('#', $hash));
     unset($hash);
     return $this->hash;
 }