Skip to content

Commit 431b8ac

Browse files
committed
Suppress exceptions with @ or @<class_list>
1 parent ed5ce99 commit 431b8ac

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+1353
-540
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
--TEST--
2+
Silencing a new object instance
3+
--FILE--
4+
<?php
5+
6+
class A {
7+
public function __construct() {
8+
throw new Exception();
9+
}
10+
}
11+
12+
$var = @new A();
13+
14+
var_dump($var);
15+
16+
echo "Done\n";
17+
?>
18+
--EXPECT--
19+
NULL
20+
Done
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
--TEST--
2+
Suppression operator ParseError with empty class list
3+
--FILE--
4+
<?php
5+
6+
function test1() {
7+
throw new Exception();
8+
return true;
9+
}
10+
11+
$var = @<>test1();
12+
13+
var_dump($var);
14+
15+
echo "Done\n";
16+
?>
17+
--EXPECTF--
18+
Parse error: syntax error, unexpected token ">" in %s on line 8
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
--TEST--
2+
Silence exception with @ operator
3+
--FILE--
4+
<?php
5+
6+
function test1() {
7+
throw new Exception();
8+
return true;
9+
}
10+
11+
$var = @test1();
12+
13+
var_dump($var);
14+
15+
echo "Done\n";
16+
?>
17+
--EXPECT--
18+
NULL
19+
Done
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
--TEST--
2+
Use of @ before foreach value to iterator upon
3+
--FILE--
4+
<?php
5+
6+
function foo() {
7+
throw new Exception();
8+
}
9+
10+
foreach (@foo() as $val) {
11+
var_dump($val);
12+
}
13+
14+
echo "Done\n";
15+
?>
16+
--EXPECTF--
17+
Warning: foreach() argument must be of type array|object, null given in %s on line %d
18+
Done
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
--TEST--
2+
Use of @ in try catch must not fail when a diagnostic is emitted
3+
--FILE--
4+
<?php
5+
6+
try {
7+
$var = @$non_existent;
8+
} catch (\Throwable $e) {
9+
echo $e::class, \PHP_EOL;
10+
}
11+
12+
var_dump($var);
13+
14+
echo "Done\n";
15+
?>
16+
--EXPECT--
17+
NULL
18+
Done
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
--TEST--
2+
Use of @ in try catch must not fail when an exception is thrown
3+
--FILE--
4+
<?php
5+
6+
function test1() {
7+
throw new Exception();
8+
return true;
9+
}
10+
11+
try {
12+
$var = @test1();
13+
} catch (\Throwable $e) {
14+
echo $e::class, \PHP_EOL;
15+
}
16+
17+
var_dump($var);
18+
19+
echo "Done\n";
20+
?>
21+
--EXPECT--
22+
NULL
23+
Done
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
--TEST--
2+
Silencing an internal function argument emitting a diagnostic
3+
--FILE--
4+
<?php
5+
6+
var_dump(@$non_existent);
7+
8+
echo "Done\n";
9+
?>
10+
--EXPECT--
11+
NULL
12+
Done
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
--TEST--
2+
Silencing an internal function argument throwing an Exception
3+
--FILE--
4+
<?php
5+
6+
function foo() {
7+
throw new Exception();
8+
return 1;
9+
}
10+
11+
var_dump(@foo());
12+
13+
echo "Done\n";
14+
?>
15+
--EXPECT--
16+
NULL
17+
Done
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
--TEST--
2+
Suppression operator with class list, single
3+
--FILE--
4+
<?php
5+
6+
function test1() {
7+
throw new Exception();
8+
return true;
9+
}
10+
11+
$var = @<Exception>test1();
12+
13+
var_dump($var);
14+
15+
echo "Done\n";
16+
?>
17+
--EXPECT--
18+
NULL
19+
Done
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
--TEST--
2+
Suppression operator should only suppress listed Exceptions
3+
--FILE--
4+
<?php
5+
6+
function test1() {
7+
throw new Error();
8+
return true;
9+
}
10+
11+
$var = @<Exception>test1();
12+
13+
var_dump($var);
14+
15+
echo "Done\n";
16+
?>
17+
--EXPECTF--
18+
Fatal error: Uncaught Error in %s:4
19+
Stack trace:
20+
#0 %s(8): test1()
21+
#1 {main}
22+
thrown in %s on line 4

0 commit comments

Comments
 (0)