mirror of
https://github.com/php/php-src.git
synced 2025-08-18 06:58:55 +02:00

PHP requires boolean typehints to be written "bool" and disallows
"boolean" as an alias. This changes the error messages to match
the actual type name and avoids confusing messages like "must be
of type boolean, boolean given".
This a followup to ce1d69a1f6
, which
implements the same change for integer->int.
73 lines
1.7 KiB
PHP
73 lines
1.7 KiB
PHP
--TEST--
|
|
ReflectionMethod::invoke() errors
|
|
--FILE--
|
|
<?php
|
|
|
|
class TestClass {
|
|
public $prop = 2;
|
|
|
|
public function foo() {
|
|
echo "Called foo(), property = $this->prop\n";
|
|
var_dump($this);
|
|
return "Return Val";
|
|
}
|
|
|
|
private static function privateMethod() {
|
|
echo "Called privateMethod()\n";
|
|
}
|
|
}
|
|
|
|
abstract class AbstractClass {
|
|
abstract function foo();
|
|
}
|
|
|
|
$foo = new ReflectionMethod('TestClass', 'foo');
|
|
$privateMethod = new ReflectionMethod("TestClass::privateMethod");
|
|
|
|
$testClassInstance = new TestClass();
|
|
$testClassInstance->prop = "Hello";
|
|
|
|
echo "invoke() on a non-object:\n";
|
|
try {
|
|
var_dump($foo->invoke(true));
|
|
} catch (ReflectionException $e) {
|
|
var_dump($e->getMessage());
|
|
}
|
|
|
|
echo "\ninvoke() on a non-instance:\n";
|
|
try {
|
|
var_dump($foo->invoke(new stdClass()));
|
|
} catch (ReflectionException $e) {
|
|
var_dump($e->getMessage());
|
|
}
|
|
|
|
echo "\nPrivate method:\n";
|
|
try {
|
|
var_dump($privateMethod->invoke($testClassInstance));
|
|
} catch (ReflectionException $e) {
|
|
var_dump($e->getMessage());
|
|
}
|
|
|
|
echo "\nAbstract method:\n";
|
|
$abstractMethod = new ReflectionMethod("AbstractClass::foo");
|
|
try {
|
|
$abstractMethod->invoke(true);
|
|
} catch (ReflectionException $e) {
|
|
var_dump($e->getMessage());
|
|
}
|
|
|
|
?>
|
|
--EXPECTF--
|
|
invoke() on a non-object:
|
|
|
|
Warning: ReflectionMethod::invoke() expects parameter 1 to be object, bool given in %s%eReflectionMethod_invoke_error1.php on line %d
|
|
NULL
|
|
|
|
invoke() on a non-instance:
|
|
string(72) "Given object is not an instance of the class this method was declared in"
|
|
|
|
Private method:
|
|
string(86) "Trying to invoke private method TestClass::privateMethod() from scope ReflectionMethod"
|
|
|
|
Abstract method:
|
|
string(53) "Trying to invoke abstract method AbstractClass::foo()"
|