]> granicus.if.org Git - php/commitdiff
Add a support function to check for property existance which is different
authorMarcus Boerger <helly@php.net>
Thu, 27 Nov 2003 17:06:26 +0000 (17:06 +0000)
committerMarcus Boerger <helly@php.net>
Thu, 27 Nov 2003 17:06:26 +0000 (17:06 +0000)
from checking a property from being empty/set.
Update test #26182.

Zend/zend_builtin_functions.c
tests/lang/bug26182.phpt

index 6abbad5e6d17917ecc8e29f0d5c4e278d8507c75..228e9dfaea718a2ccea1f448f92a0fb08703ce58 100644 (file)
@@ -42,6 +42,7 @@ static ZEND_FUNCTION(define);
 static ZEND_FUNCTION(defined);
 static ZEND_FUNCTION(get_class);
 static ZEND_FUNCTION(get_parent_class);
+static ZEND_FUNCTION(property_exists);
 static ZEND_FUNCTION(method_exists);
 static ZEND_FUNCTION(class_exists);
 static ZEND_FUNCTION(function_exists);
@@ -99,6 +100,7 @@ static zend_function_entry builtin_functions[] = {
        ZEND_FE(defined,                        NULL)
        ZEND_FE(get_class,                      NULL)
        ZEND_FE(get_parent_class,       NULL)
+       ZEND_FE(property_exists,    NULL)
        ZEND_FE(method_exists,          NULL)
        ZEND_FE(class_exists,           NULL)
        ZEND_FE(function_exists,        NULL)
@@ -756,6 +758,28 @@ ZEND_FUNCTION(get_class_methods)
 /* }}} */
 
 
+/* {{{ proto bool property_exists(object obj, string property_name)
+   Checks if the object has a property */
+ZEND_FUNCTION(property_exists)
+{
+       zval **object, **property;
+       
+       if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &object, &property)==FAILURE) {
+               ZEND_WRONG_PARAM_COUNT();
+       }
+       if ((*object)->type != IS_OBJECT) {
+               RETURN_FALSE;
+       }
+
+       if (Z_OBJ_HANDLER_PP(object, has_property) && Z_OBJ_HANDLER_PP(object, has_property)(*object, *property, 1 TSRMLS_CC)) {
+               RETURN_TRUE;
+       } else {
+               RETURN_FALSE;
+       }
+}
+/* }}} */
+
+
 /* {{{ proto bool method_exists(object object, string method)
    Checks if the class method exists */
 ZEND_FUNCTION(method_exists)
index ec711d40c9cd4654fe4017c03b377721dc86ccc2..480d1469a0a3dd863fe610a5d3af991018d10424 100644 (file)
@@ -17,6 +17,13 @@ class A {
 $t = new A ();
 
 print_r($t);
+var_dump(property_exists($t, 'x'));
+var_dump(property_exists($t, 'y'));
+var_dump(property_exists($t, 'z'));
+var_dump(isset($t->y));
+var_dump(property_exists($t, 'y'));
+$t->z = 1;
+var_dump(property_exists($t, 'z'));
 
 ?>
 --EXPECT--
@@ -24,3 +31,9 @@ a Object
 (
     [x] => 
 )
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(true)