php-src/ext/reflection/tests/ReflectionAttribute_newInstance_exception.phpt
Tim Düsterhus c90c4fe553
Add zend_get_attribute_object() (#14161)
* Add `zend_get_attribute_object()`

This makes the implementation for `ReflectionAttribute::newInstance()`
reusable.

* Add test for the stack trace behavior of ReflectionAttribute::newInstance()

This test ensures that the `filename` parameter for the fake stack frame is
functional. Without it, the stack trace would show `[internal function]` for
frame `#0`.

* Fix return type of `call_attribute_constructor`
2024-05-14 08:39:43 +02:00

29 lines
683 B
PHP

--TEST--
Exception handling in ReflectionAttribute::newInstance()
--FILE--
<?php
#[\Attribute]
class A {
public function __construct() {
throw new \Exception('Test');
}
}
class Foo {
#[A]
public function bar() {}
}
$rm = new ReflectionMethod(Foo::class, "bar");
$attribute = $rm->getAttributes()[0];
var_dump($attribute->newInstance());
?>
--EXPECTF--
Fatal error: Uncaught Exception: Test in %s:6
Stack trace:
#0 %sReflectionAttribute_newInstance_exception.php(11): A->__construct()
#1 %sReflectionAttribute_newInstance_exception.php(18): ReflectionAttribute->newInstance()
#2 {main}
thrown in %sReflectionAttribute_newInstance_exception.php on line 6