]> granicus.if.org Git - php/commitdiff
- MFH Add spl_object_hash()
authorMarcus Boerger <helly@php.net>
Sun, 9 Jul 2006 10:22:27 +0000 (10:22 +0000)
committerMarcus Boerger <helly@php.net>
Sun, 9 Jul 2006 10:22:27 +0000 (10:22 +0000)
ext/spl/php_spl.c
ext/spl/tests/spl_005.phpt [new file with mode: 0755]

index 07dff83fd96e3988fbb2bb983fd0862431f9e01f..f22a30c498a8941254da9da8cf570c5e24d8899f 100755 (executable)
@@ -36,6 +36,7 @@
 #include "spl_observer.h"
 #include "zend_exceptions.h"
 #include "zend_interfaces.h"
+#include "ext/standard/md5.h"
 
 #ifdef COMPILE_DL_SPL
 ZEND_GET_MODULE(spl)
@@ -566,6 +567,32 @@ PHP_FUNCTION(spl_autoload_functions)
        add_next_index_string(return_value, EG(autoload_func)->common.function_name, 1);
 } /* }}} */
 
+/* {{{ proto string spl_object_hash(object obj)
+ Return hash id for given object */
+PHP_FUNCTION(spl_object_hash)
+{
+       zval *obj;
+       int len;
+       char *hash;
+       char md5str[33];
+       PHP_MD5_CTX context;
+       unsigned char digest[16];
+
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &obj) == FAILURE) {
+               return;
+       }
+
+       len = spprintf(&hash, 0, "%p:%d", Z_OBJ_HT_P(obj), Z_OBJ_HANDLE_P(obj));
+       
+       md5str[0] = '\0';
+       PHP_MD5Init(&context);
+       PHP_MD5Update(&context, (unsigned char*)hash, len);
+       PHP_MD5Final(digest, &context);
+       make_digest(md5str, digest);
+       RETVAL_STRING(md5str, 1);
+       efree(hash);
+}
+
 int spl_build_class_list_string(zval **entry, char **list TSRMLS_DC) /* {{{ */
 {
        char *res;
@@ -632,6 +659,7 @@ zend_function_entry spl_functions[] = {
        PHP_FE(spl_autoload_call,       NULL)
        PHP_FE(class_parents,           NULL)
        PHP_FE(class_implements,        NULL)
+       PHP_FE(spl_object_hash,         NULL)
 #ifdef SPL_ITERATORS_H
        PHP_FE(iterator_to_array,       arginfo_iterator)
        PHP_FE(iterator_count,          arginfo_iterator)
diff --git a/ext/spl/tests/spl_005.phpt b/ext/spl/tests/spl_005.phpt
new file mode 100755 (executable)
index 0000000..bb297bb
--- /dev/null
@@ -0,0 +1,23 @@
+--TEST--
+SPL: spl_object_hash()
+--SKIPIF--
+<?php if (!extension_loaded("spl")) print "skip"; ?>
+--FILE--
+<?php
+
+var_dump(spl_object_hash(new stdClass));
+var_dump(spl_object_hash(42));
+var_dump(spl_object_hash());
+
+?>
+===DONE===
+<?php exit(0); ?>
+--EXPECTF--
+string(32) "%s"
+
+Warning: spl_object_hash() expects parameter 1 to be object, integer given in %sspl_005.php on line %d
+NULL
+
+Warning: spl_object_hash() expects exactly 1 parameter, 0 given in %sspl_005.php on line %d
+NULL
+===DONE===