Container as $object) { // - если объект реализует интерфейс IHashable if ($object instanceof IHashable) { // -- то хэширую его и добавляю в массив $toHash[] = $object->Hash(); // -- переходим к следующему элементу continue; } // - если объект реализует интерфейс ISerializable if ($object instanceof ISerializable) { // -- то сериализую его и добавляю в массив $toHash[] = $object->Serialize(); // -- переходим к следующему элементу continue; } // - если объект реализует интерфейс IArrayable if ($object instanceof IArrayable) { // -- то преобразую его в массив $array = $object->ToArray(); // -- сериализую его и добавляю в массив $toHash[] = json_encode($array, JSON_UNESCAPED_UNICODE); // -- переходим к следующему элементу continue; } // - иначе просто сериализую объект $toHash[] = serialize($object); } // Возвращаю хеш массива return md5(json_encode($toHash, JSON_UNESCAPED_UNICODE)); } }