]> granicus.if.org Git - php/commitdiff
- Added class_exists()
authorAndrei Zmievski <andrei@php.net>
Tue, 14 Dec 1999 21:15:24 +0000 (21:15 +0000)
committerAndrei Zmievski <andrei@php.net>
Tue, 14 Dec 1999 21:15:24 +0000 (21:15 +0000)
- Moved function_exists() here from from the basic_functions.c
- Modified method_exists() to convert method name to lowercase
  when checking

Zend/zend_builtin_functions.c

index 4e70e460a2d5b2d87adac12f1f2e24624bb928e0..bbabb4d9b6bd3a7707717c99d3ff6ea1bafab6cf 100644 (file)
@@ -39,6 +39,8 @@ static ZEND_FUNCTION(defined);
 static ZEND_FUNCTION(get_class);
 static ZEND_FUNCTION(get_parent_class);
 static ZEND_FUNCTION(method_exists);
+static ZEND_FUNCTION(class_exists);
+static ZEND_FUNCTION(function_exists);
 static ZEND_FUNCTION(leak);
 static ZEND_FUNCTION(get_used_files);
 static ZEND_FUNCTION(get_imported_files);
@@ -60,6 +62,8 @@ static zend_function_entry builtin_functions[] = {
        ZEND_FE(get_class,                      NULL)
        ZEND_FE(get_parent_class,       NULL)
        ZEND_FE(method_exists,          NULL)
+       ZEND_FE(class_exists,           NULL)
+       ZEND_FE(function_exists,        NULL)
        ZEND_FE(leak,                           NULL)
        ZEND_FE(get_used_files,         NULL)
        ZEND_FE(get_imported_files,     NULL)
@@ -394,23 +398,77 @@ ZEND_FUNCTION(get_parent_class)
 */
 ZEND_FUNCTION(method_exists)
 {
-       zval **arg1, **arg2;
+       zval **klass, **method_name;
+       char *lcname;
        
-       if (ARG_COUNT(ht)!=2 || getParametersEx(2, &arg1, &arg2)==FAILURE) {
+       if (ARG_COUNT(ht)!=2 || getParametersEx(2, &klass, &method_name)==FAILURE) {
                RETURN_FALSE;
        }
-       if ((*arg1)->type != IS_OBJECT) {
+       if ((*klass)->type != IS_OBJECT) {
                RETURN_FALSE;
        }
-       convert_to_string_ex(arg2);
-       if(zend_hash_exists(&(*arg1)->value.obj.ce->function_table, (*arg2)->value.str.val, (*arg2)->value.str.len+1)) {
+       convert_to_string_ex(method_name);
+       lcname = estrdup((*method_name)->value.str.val);
+       zend_str_tolower(lcname, (*method_name)->value.str.len);
+       if(zend_hash_exists(&(*klass)->value.obj.ce->function_table, lcname, (*method_name)->value.str.len+1)) {
+               efree(lcname);
                RETURN_TRUE;
        } else {
+               efree(lcname);
                RETURN_FALSE;
        }
 }
 /* }}} */
 
+/* {{{ proto bool class_exists(string classname)
+     Checks if the class exists ...
+*/
+ZEND_FUNCTION(class_exists)
+{
+       zval **class_name;
+       char *lcname;
+       CLS_FETCH();
+
+       if (ARG_COUNT(ht) != 1 || getParametersEx(1, &class_name)==FAILURE) {
+               RETURN_FALSE;
+       }
+       convert_to_string_ex(class_name);
+       lcname = estrdup((*class_name)->value.str.val);
+       zend_str_tolower(lcname, (*class_name)->value.str.len);
+       if (zend_hash_exists(CG(class_table), lcname, (*class_name)->value.str.len+1)) {
+               efree(lcname);
+               RETURN_TRUE;
+       } else {
+               efree(lcname);
+               RETURN_FALSE;
+       }
+}
+/* }}} */
+
+/* {{{ proto bool function_exists(string function_name) 
+   Checks if the function exists */
+ZEND_FUNCTION(function_exists)
+{
+       zval **function_name;
+       char *lcname;
+       CLS_FETCH();
+       
+       if (ARG_COUNT(ht)!=1 || getParametersEx(1, &function_name)==FAILURE) {
+               WRONG_PARAM_COUNT;
+       }
+       convert_to_string_ex(function_name);
+       lcname = estrdup((*function_name)->value.str.val);
+       zend_str_tolower(lcname, (*function_name)->value.str.len);
+       if (zend_hash_exists(CG(function_table), lcname, (*function_name)->value.str.len+1) == FAILURE) {
+               efree(lcname);
+               RETURN_FALSE;
+       } else {
+               efree(lcname);
+               RETURN_TRUE;
+       }
+}
+/* }}} */
+
 ZEND_FUNCTION(leak)
 {
        int leakbytes=3;