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.