php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Return to Bug #55475
Patch final_patch_for_5_4_and_HEAD_v2 revision 2011-11-08 09:24 UTC by alan_k@php.net
Patch is_a_5.4_alternative revision 2011-10-17 13:15 UTC by jbondc at openmv dot com
Patch final_patch_for_5_4_and_HEAD revision 2011-10-13 07:36 UTC by alan_k@php.net
Patch is_a_with_warning.txt revision 2011-09-25 09:32 UTC by alan_k@php.net
Patch Is_a_with_allow_string_argument_v3 revision 2011-09-22 23:31 UTC by alan_k@php.net
Patch Is_a_with_allow_string_argument_v2 revision 2011-09-22 23:26 UTC by alan_k@php.net
Patch Is_a_with_allow_string_argument revision 2011-09-22 23:24 UTC by alan_k@php.net
Patch is_class_of.diff revision 2011-09-20 21:32 UTC by alan_k@php.net
Patch is_class_of.txt revision 2011-09-20 21:25 UTC by alan_k@php.net
Patch revert.is_a.behaviour.to.ignoring.strings.diff revision 2011-08-25 02:37 UTC by alan at akbkhome dot com
Patch bug55475 revision 2011-08-22 10:30 UTC by kalle@php.net

Patch is_class_of.diff for Scripting Engine problem Bug #55475

Patch version 2011-09-20 21:32 UTC

Return to Bug #55475 | Download this patch
This patch renders other patches obsolete

Obsolete patches:

Patch Revisions:

Developer: alan_k@php.net

Index: Zend/zend_builtin_functions.c
===================================================================
--- Zend/zend_builtin_functions.c	(revision 317068)
+++ Zend/zend_builtin_functions.c	(working copy)
@@ -62,6 +62,7 @@
 #endif
 static ZEND_FUNCTION(get_included_files);
 static ZEND_FUNCTION(is_subclass_of);
+static ZEND_FUNCTION(is_class_of);
 static ZEND_FUNCTION(is_a);
 static ZEND_FUNCTION(get_class_vars);
 static ZEND_FUNCTION(get_object_vars);
@@ -145,6 +146,11 @@
 	ZEND_ARG_INFO(0, class_name)
 ZEND_END_ARG_INFO()
 
+ZEND_BEGIN_ARG_INFO_EX(arginfo_is_class_of, 0, 0, 2)
+	ZEND_ARG_INFO(0, object)
+	ZEND_ARG_INFO(0, class_name)
+ZEND_END_ARG_INFO()
+
 ZEND_BEGIN_ARG_INFO_EX(arginfo_get_class_vars, 0, 0, 1)
 	ZEND_ARG_INFO(0, class_name)
 ZEND_END_ARG_INFO()
@@ -273,6 +279,7 @@
 	ZEND_FE(get_included_files,	arginfo_zend__void)
 	ZEND_FALIAS(get_required_files,	get_included_files,		arginfo_zend__void)
 	ZEND_FE(is_subclass_of,		arginfo_is_subclass_of)
+	ZEND_FE(is_class_of,		arginfo_is_class_of)
 	ZEND_FE(is_a,				arginfo_is_subclass_of)
 	ZEND_FE(get_class_vars,		arginfo_get_class_vars)
 	ZEND_FE(get_object_vars,	arginfo_get_object_vars)
@@ -832,7 +839,7 @@
 /* }}} */
 
 
-static void is_a_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool only_subclass)
+static void is_a_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool use_autoload)
 {
 	zval *obj;
 	char *class_name;
@@ -845,7 +852,7 @@
 		return;
 	}
 	
-	if (Z_TYPE_P(obj) == IS_STRING) {
+	if (use_autoload && Z_TYPE_P(obj) == IS_STRING) {
 		zend_class_entry **the_ce;
 		if (zend_lookup_class(Z_STRVAL_P(obj), Z_STRLEN_P(obj), &the_ce TSRMLS_CC) == FAILURE) {
 			RETURN_FALSE;
@@ -860,7 +867,7 @@
 	if (zend_lookup_class_ex(class_name, class_name_len, NULL, 0, &ce TSRMLS_CC) == FAILURE) {
 		retval = 0;
 	} else {
-		if (only_subclass && instance_ce == *ce) {
+		if (use_autoload == 2 && instance_ce == *ce) {
 			retval = 0;
  		} else {
 			retval = instanceof_function(instance_ce, *ce TSRMLS_CC);
@@ -871,17 +878,26 @@
 }
 
 
-/* {{{ proto bool is_subclass_of(object object, string class_name)
+/* {{{ proto bool is_subclass_of(mixed object_or_string, string class_name)
    Returns true if the object has this class as one of its parents */
 ZEND_FUNCTION(is_subclass_of)
 {
+	is_a_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, 2);
+}
+/* }}} */
+
+
+/* {{{ proto bool is_class_of(mixed object_or_string, string class_name)
+    Returns true if the object is of this class or has this class as one of its parents */
+ZEND_FUNCTION(is_class_of)
+{
 	is_a_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
 }
 /* }}} */
 
 
-/* {{{ proto bool is_a(object object, string class_name)
-   Returns true if the object is of this class or has this class as one of its parents */
+/* {{{ proto bool is_a(mixed object, string class_name)
+   Returns true if the object is an object and is this class or has this class as one of its parents */
 ZEND_FUNCTION(is_a)
 {
 	is_a_impl(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Nov 02 21:01:28 2024 UTC