PHP - Ds\Hashable::hash() Function



The PHP Ds\Hashable::hash() function is used to determine the hash value of an object. When using objects as keys in hash-based collections, like hash tables or sets, this function is very helpful.

Syntax

Below is the syntax of the PHP Ds\Hashable::hash() function −

mixed public Ds\Hashable::hash()

Parameters

The hash() function does not take any parameters.

Return Value

This function returns a scalar value to be used as the hash value.

PHP Version

The hash() function is available from version 1.0.0 of the PECL Ds extension onwards.

Example 1

First we will show you the basic example of the PHP Ds\Hashable::hash() function to get a hash value for an object.

<?php
   // Create a class Person and implement Ds\Hashable 
   class Person implements Ds\Hashable {
      private $name;
      private $age;
  
      public function __construct($name, $age) {
          $this->name = $name;
          $this->age = $age;
      }
  
      public function hash() {
          return md5($this->name . $this->age);
      }
  
      public function equals($obj): bool {
          return $this->name === $obj->name && $this->age === $obj->age;
      }
  }
  
  $person = new Person("Ankit", 33);
  echo $person->hash();
  
?>

Output

The above code will result something like this −

4ad162f31dbd28172e2dc04a2f033f47

Example 2

This example shows how to use hashable objects in a set to make sure the uniqueness as per the hash value.

<?php
   // Create a Product class and implement Ds\Hashable
   class Product implements Ds\Hashable {
      private $id;
      private $name;
  
      public function __construct($id, $name) {
          $this->id = $id;
          $this->name = $name;
      }
  
      public function hash() {
          return $this->id;
      }
  
      public function equals($obj): bool {
          return $this->id === $obj->id;
      }
  }
  
  $product1 = new Product(101, "Laptop");
  $product2 = new Product(102, "Smartphone");
  
  $set = new Ds\Set();
  $set->add($product1);
  $set->add($product2);
  
  foreach ($set as $product) {
      echo $product->hash() . "\n";
  }
?> 

Output

After running the above program, it generates the following output −

101
102

Example 3

Now we will use hash() function to create a custom hash function for an object that combines multiple properties.

<?php
   // Create a class Book and implement Ds\Hashable
   class Book implements Ds\Hashable {
      private $title;
      private $author;
  
      public function __construct($title, $author) {
          $this->title = $title;
          $this->author = $author;
      }
  
      public function hash() {
          return sha1($this->title . $this->author);
      }
  
      public function equals($obj): bool {
          return $this->title === $obj->title && $this->author === $obj->author;
      }
  }
  
  $book = new Book("1984", "George Orwell");
  echo "Hash value is as follows: \n";
  echo $book->hash();
?> 

Output

This will create the below output −

Hash value is as follows:
f54227c9321449aea0c1ddcd9d02228a09b6bcbc

Example 4

In the following example, we are using the hash() function to compare two objects and see if they are equal as per their hash values.

<?php
   // Create a Car class and implement Ds\Hashable
   class Car implements Ds\Hashable {
      private $make;
      private $model;
  
      public function __construct($make, $model) {
          $this->make = $make;
          $this->model = $model;
      }
  
      public function hash() {
          return crc32($this->make . $this->model);
      }
  
      public function equals($obj): bool {
          return $this->make === $obj->make && $this->model === $obj->model;
      }
  }
  
  $car1 = new Car("Maruti Suzuki", "Baleno");
  $car2 = new Car("Maruti Suzuki", "Baleno");
  
  if ($car1->equals($car2)) {
      echo "Cars are identical.";
  } else {
      echo "Cars are different.";
  }
?> 

Output

When the above program is executed, it will produce the below output −

Cars are identical.
php_function_reference.htm
Advertisements