Hello Andrey, same goes for property_exists() which is why i added it.
marcus Friday, April 8, 2005, 6:31:48 PM, you wrote: > Hello Andi, Marcus, > method_exists() is quite vital to help where the type hinting fail. > Type hinting fail because it leads to a fatal error which is uncatchable > and the code cannot react on this. Therefore, for me type hinting is > kind of useless since I cannot catch my bugs by executing some code whenever > the data passed is not what the function/method expects. Reflection API is > overkill to write everywhere and has to be wrapped to something which at > the end will simulate method_exists(). > Thanks for you attention, > Andrey > Marcus Boerger wrote: >> Hello Andi, >> >> to this i only agree under two conditions. First we remove other like >> method_exists() too and second we fix handling of implicit public and >> dynamic properties. Unless the second is done i see such a function as >> relative important and don't like to use reflection overhead always. >> >> regards >> marcus >> >> Friday, April 8, 2005, 6:00:03 PM, you wrote: >> >> >>>Marcus, >> >> >>>There was a long discussion about this a few months ago. >>>The conclusion was to use the reflection_api for the very few instances >>>where isset() isn't relevant. >>>Although we have done bad stuff in the past, it's also not a good idea to >>>continue polluting the global namespace. >>>Please revert this patch. >>>FYI, all the other requests for additional functions like >>>class_constant_exists() should also be reflection API. It's best for the >>>language. >> >> >>>Thanks, >>>Andi >> >> >>>At 01:33 PM 4/8/2005 +0000, Marcus Boerger wrote: >>> >>>>helly Fri Apr 8 09:33:17 2005 EDT >>>> >>>> Modified files: >>>> /ZendEngine2 zend_builtin_functions.c >>>> Log: >>>> - Add property_exits() >>>> >>>>http://cvs.php.net/diff.php/ZendEngine2/zend_builtin_functions.c?r1=1.262&r2=1.263&ty=u >>>>Index: ZendEngine2/zend_builtin_functions.c >>>>diff -u ZendEngine2/zend_builtin_functions.c:1.262 >>>>ZendEngine2/zend_builtin_functions.c:1.263 >>>>--- ZendEngine2/zend_builtin_functions.c:1.262 Mon Apr 4 13:23:38 2005 >>>>+++ ZendEngine2/zend_builtin_functions.c Fri Apr 8 09:33:15 2005 >>>>@@ -17,7 +17,7 @@ >>>> >>>>+----------------------------------------------------------------------+ >>>> */ >>>> >>>>-/* $Id: zend_builtin_functions.c,v 1.262 2005/04/04 17:23:38 stas Exp $ */ >>>>+/* $Id: zend_builtin_functions.c,v 1.263 2005/04/08 13:33:15 helly Exp $ */ >>>> >>>> #include "zend.h" >>>> #include "zend_API.h" >>>>@@ -43,6 +43,7 @@ >>>> static ZEND_FUNCTION(get_class); >>>> static ZEND_FUNCTION(get_parent_class); >>>> static ZEND_FUNCTION(method_exists); >>>>+static ZEND_FUNCTION(property_exists); >>>> static ZEND_FUNCTION(class_exists); >>>> static ZEND_FUNCTION(interface_exists); >>>> static ZEND_FUNCTION(function_exists); >>>>@@ -102,6 +103,7 @@ >>>> ZEND_FE(get_class, NULL) >>>> ZEND_FE(get_parent_class, NULL) >>>> ZEND_FE(method_exists, NULL) >>>>+ ZEND_FE(property_exists, NULL) >>>> ZEND_FE(class_exists, NULL) >>>> ZEND_FE(interface_exists, NULL) >>>> ZEND_FE(function_exists, NULL) >>>>@@ -889,6 +891,63 @@ >>>> } >>>> /* }}} */ >>>> >>>>+/* {{{ proto bool property_exists(mixed object_or_class, string >>>>property_name) >>>>+ Checks if the object or class has a property */ >>>>+ZEND_FUNCTION(property_exists) >>>>+{ >>>>+ zval **object, **property; >>>>+ zend_class_entry *ce, **pce; >>>>+ zend_property_info *property_info; >>>>+ char *prop_name, *class_name; >>>>+ >>>>+ if (ZEND_NUM_ARGS()!= 2 || zend_get_parameters_ex(2, &object, >>>>&property)==FAILURE) { >>>>+ ZEND_WRONG_PARAM_COUNT(); >>>>+ } >>>>+ convert_to_string_ex(property); >>>>+ >>>>+ switch((*object)->type) { >>>>+ case IS_STRING: >>>>+ if (zend_lookup_class(Z_STRVAL_PP(object), >>>>Z_STRLEN_PP(object), &pce TSRMLS_CC) == SUCCESS) { >>>>+ ce = *pce; >>>>+ } >>>>+ if (!ce) { >>>>+ RETURN_NULL(); >>>>+ } >>>>+ if (!(property_info = zend_get_property_info(ce, >>>>*property, 1 TSRMLS_CC)) || property_info == &EG(std_property_info)) { >>>>+ RETURN_FALSE; >>>>+ } >>>>+ if (property_info->flags & ZEND_ACC_PUBLIC) { >>>>+ RETURN_TRUE; >>>>+ } >>>>+ zend_unmangle_property_name(property_info->name, >>>>&class_name, &prop_name); >>>>+ if (!strncmp(class_name, "*", 1)) { >>>>+ if (instanceof_function(EG(scope), ce TSRMLS_CC)) { >>>>+ RETURN_TRUE; >>>>+ } >>>>+ RETURN_FALSE; >>>>+ } >>>>+ if (zend_lookup_class(Z_STRVAL_PP(object), >>>>Z_STRLEN_PP(object), &pce TSRMLS_CC) == SUCCESS) { >>>>+ ce = *pce; >>>>+ } else { >>>>+ RETURN_FALSE; /* shouldn't happen */ >>>>+ } >>>>+ RETURN_BOOL(EG(scope) == ce); >>>>+ RETURN_FALSE; >>>>+ >>>>+ case IS_OBJECT: >>>>+ if (Z_OBJ_HANDLER_PP(object, has_property) && >>>>Z_OBJ_HANDLER_PP(object, has_property)(*object, *property, 1 TSRMLS_CC)) { >>>>+ RETURN_TRUE; >>>>+ } >>>>+ RETURN_FALSE; >>>>+ >>>>+ default: >>>>+ zend_error(E_WARNING, "Parameter must either be an object >>>>or the name of an existing class"); >>>>+ RETURN_NULL(); >>>>+ } >>>>+} >>>>+/* }}} */ >>>>+ >>>>+ >>>> /* {{{ proto bool class_exists(string classname [, bool autoload]) >>>> Checks if the class exists */ >>>> ZEND_FUNCTION(class_exists) >>>> >>>>-- >>>>Zend Engine CVS Mailing List (http://cvs.php.net/) >>>>To unsubscribe, visit: http://www.php.net/unsub.php >> >> >> >> >> -- Best regards, Marcus mailto:[EMAIL PROTECTED] -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php