summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/standard/basic_functions.c31
-rw-r--r--ext/standard/basic_functions.h1
2 files changed, 32 insertions, 0 deletions
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c
index 5374c24843..41c2d403f9 100644
--- a/ext/standard/basic_functions.c
+++ b/ext/standard/basic_functions.c
@@ -336,6 +336,7 @@ function_entry basic_functions[] = {
PHP_FE(is_array, first_arg_allow_ref)
PHP_FE(is_object, first_arg_allow_ref)
PHP_FE(is_scalar, NULL)
+ PHP_FE(is_callable, third_argument_force_ref)
PHP_FE(error_log, NULL)
PHP_FE(call_user_func, NULL)
@@ -2628,6 +2629,36 @@ PHP_FUNCTION(parse_ini_file)
/* }}} */
+/* {{{ proto bool is_callable(mixed var [, bool syntax_only [, string callable_name ]]) */
+PHP_FUNCTION(is_callable)
+{
+ zval **var, **syntax_only, **callable_name;
+ char *name;
+ zend_bool retval;
+ zend_bool syntax = 0;
+
+ if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 3 ||
+ zend_get_parameters_ex(ZEND_NUM_ARGS(), &var, &syntax_only, &callable_name) == FAILURE) {
+ WRONG_PARAM_COUNT;
+ }
+
+ if (ZEND_NUM_ARGS() > 1) {
+ convert_to_boolean_ex(syntax_only);
+ syntax = Z_BVAL_PP(syntax_only);
+ }
+
+ if (ZEND_NUM_ARGS() > 2) {
+ retval = zend_is_callable(*var, syntax, &name);
+ zval_dtor(*callable_name);
+ ZVAL_STRING(*callable_name, name, 0);
+ } else
+ retval = zend_is_callable(*var, syntax, NULL);
+
+ RETURN_BOOL(retval);
+}
+/* }}} */
+
+
/*
* Local variables:
* tab-width: 4
diff --git a/ext/standard/basic_functions.h b/ext/standard/basic_functions.h
index 381ab04969..86e7756c74 100644
--- a/ext/standard/basic_functions.h
+++ b/ext/standard/basic_functions.h
@@ -77,6 +77,7 @@ PHP_FUNCTION(is_string);
PHP_FUNCTION(is_array);
PHP_FUNCTION(is_object);
PHP_FUNCTION(is_scalar);
+PHP_FUNCTION(is_callable);
PHP_FUNCTION(error_log);