mirror of
https://github.com/php/php-src.git
synced 2026-04-26 17:38:14 +02:00
Use correct ZPP mechanism in get_class_methods()
From now on, instead of returning null, an exception is thrown when not a string or an object is passed to the function. Closes GH-5792
This commit is contained in:
@@ -917,25 +917,14 @@ static int same_name(zend_string *key, zend_string *name) /* {{{ */
|
||||
Returns an array of method names for class or class instance. */
|
||||
ZEND_FUNCTION(get_class_methods)
|
||||
{
|
||||
zval *klass;
|
||||
zval method_name;
|
||||
zend_class_entry *ce = NULL;
|
||||
zend_class_entry *scope;
|
||||
zend_function *mptr;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &klass) == FAILURE) {
|
||||
RETURN_THROWS();
|
||||
}
|
||||
|
||||
if (Z_TYPE_P(klass) == IS_OBJECT) {
|
||||
ce = Z_OBJCE_P(klass);
|
||||
} else if (Z_TYPE_P(klass) == IS_STRING) {
|
||||
ce = zend_lookup_class(Z_STR_P(klass));
|
||||
}
|
||||
|
||||
if (!ce) {
|
||||
RETURN_NULL();
|
||||
}
|
||||
ZEND_PARSE_PARAMETERS_START(1, 1)
|
||||
Z_PARAM_CLASS_NAME_OR_OBJ(ce)
|
||||
ZEND_PARSE_PARAMETERS_END();
|
||||
|
||||
array_init(return_value);
|
||||
scope = zend_get_executed_scope();
|
||||
|
||||
@@ -42,7 +42,7 @@ function get_object_vars(object $obj): array {}
|
||||
|
||||
function get_mangled_object_vars(object $obj): array {}
|
||||
|
||||
function get_class_methods($class): ?array {}
|
||||
function get_class_methods(string|object $class): array {}
|
||||
|
||||
function method_exists($object_or_class, string $method): bool {}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* This is a generated file, edit the .stub.php file instead.
|
||||
* Stub hash: 3ce3eab15ec8df2006633735f53f12cff142260c */
|
||||
* Stub hash: f81f2b4cf552c4ee8406b91c437797feb1164be0 */
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_zend_version, 0, 0, IS_STRING, 0)
|
||||
ZEND_END_ARG_INFO()
|
||||
@@ -79,8 +79,8 @@ ZEND_END_ARG_INFO()
|
||||
|
||||
#define arginfo_get_mangled_object_vars arginfo_get_object_vars
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_class_methods, 0, 1, IS_ARRAY, 1)
|
||||
ZEND_ARG_INFO(0, class)
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_get_class_methods, 0, 1, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_MASK(0, class, MAY_BE_STRING|MAY_BE_OBJECT, NULL)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_method_exists, 0, 2, _IS_BOOL, 0)
|
||||
|
||||
@@ -25,7 +25,11 @@ echo "Argument is name of class which has no methods:\n";
|
||||
var_dump( get_class_methods("D") );
|
||||
|
||||
echo "Argument is non existent class:\n";
|
||||
var_dump( get_class_methods("NonExistent") );
|
||||
try {
|
||||
var_dump( get_class_methods("NonExistent") );
|
||||
} catch (TypeError $exception) {
|
||||
echo $exception->getMessage() . "\n";
|
||||
}
|
||||
|
||||
echo "Done";
|
||||
?>
|
||||
@@ -53,5 +57,5 @@ Argument is name of class which has no methods:
|
||||
array(0) {
|
||||
}
|
||||
Argument is non existent class:
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, string given
|
||||
Done
|
||||
|
||||
@@ -70,7 +70,11 @@ $values = array(
|
||||
|
||||
foreach($values as $value) {
|
||||
echo "\nArg value " . (is_object($value) ? get_class($value) : $value) . " \n";
|
||||
var_dump( get_class_methods($value) );
|
||||
try {
|
||||
var_dump( get_class_methods($value) );
|
||||
} catch (TypeError $exception) {
|
||||
echo $exception->getMessage() . "\n";
|
||||
}
|
||||
};
|
||||
echo "Done";
|
||||
?>
|
||||
@@ -80,89 +84,89 @@ Error: 2 - Undefined variable $undefined_var
|
||||
Error: 2 - Undefined variable $unset_var
|
||||
|
||||
Arg value 0
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, int given
|
||||
|
||||
Arg value 1
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, int given
|
||||
|
||||
Arg value 12345
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, int given
|
||||
|
||||
Arg value -2345
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, int given
|
||||
|
||||
Arg value 10.5
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, float given
|
||||
|
||||
Arg value -10.5
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, float given
|
||||
|
||||
Arg value 101234567000
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, float given
|
||||
|
||||
Arg value 1.07654321E-9
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, float given
|
||||
|
||||
Arg value 0.5
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, float given
|
||||
Error: 2 - Array to string conversion
|
||||
|
||||
Arg value Array
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, array given
|
||||
Error: 2 - Array to string conversion
|
||||
|
||||
Arg value Array
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, array given
|
||||
Error: 2 - Array to string conversion
|
||||
|
||||
Arg value Array
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, array given
|
||||
Error: 2 - Array to string conversion
|
||||
|
||||
Arg value Array
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, array given
|
||||
Error: 2 - Array to string conversion
|
||||
|
||||
Arg value Array
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, array given
|
||||
|
||||
Arg value
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, null given
|
||||
|
||||
Arg value
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, null given
|
||||
|
||||
Arg value 1
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, bool given
|
||||
|
||||
Arg value
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, bool given
|
||||
|
||||
Arg value 1
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, bool given
|
||||
|
||||
Arg value
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, bool given
|
||||
|
||||
Arg value
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, string given
|
||||
|
||||
Arg value
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, string given
|
||||
|
||||
Arg value string
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, string given
|
||||
|
||||
Arg value string
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, string given
|
||||
|
||||
Arg value stdClass
|
||||
array(0) {
|
||||
}
|
||||
|
||||
Arg value
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, null given
|
||||
|
||||
Arg value
|
||||
NULL
|
||||
get_class_methods(): Argument #1 ($class) must be a valid class name or object, null given
|
||||
Done
|
||||
|
||||
Reference in New Issue
Block a user