mirror of
https://github.com/php/php-src.git
synced 2026-03-26 01:02:25 +01:00
- MFH Add spl_object_hash()
This commit is contained in:
@@ -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)
|
||||
|
||||
23
ext/spl/tests/spl_005.phpt
Executable file
23
ext/spl/tests/spl_005.phpt
Executable file
@@ -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===
|
||||
Reference in New Issue
Block a user