Skip to content

Commit 27442e8

Browse files
committed
Add throw_on_error declare
This declare promotes warnings automatically to Exceptions
1 parent 6f38a53 commit 27442e8

26 files changed

+418
-2
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
--TEST--
2+
If throw_on_error declare statement is explicitly turned off do not promote warning
3+
--FILE--
4+
<?php
5+
declare(throw_on_error=0);
6+
7+
echo $undef;
8+
9+
--EXPECTF--
10+
Warning: Undefined variable $undef in %s on line %d
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
--TEST--
2+
throw_on_error declare statement promote warning
3+
--FILE--
4+
<?php
5+
declare(throw_on_error=1);
6+
7+
try {
8+
echo $undef;
9+
} catch (\Exception $e) {
10+
var_dump($e);
11+
}
12+
13+
--EXPECTF--
14+
object(Exception)#1 (7) {
15+
["message":protected]=>
16+
string(25) "Undefined variable $undef"
17+
["string":"Exception":private]=>
18+
string(0) ""
19+
["code":protected]=>
20+
int(2)
21+
["file":protected]=>
22+
string(%d) "%s"
23+
["line":protected]=>
24+
int(5)
25+
["trace":"Exception":private]=>
26+
array(0) {
27+
}
28+
["previous":"Exception":private]=>
29+
NULL
30+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
--TEST--
2+
Test throw_on_error declare statement is isolated to file
3+
--FILE--
4+
<?php
5+
include 'fixture/no_declare.inc';
6+
7+
try {
8+
include 'fixture/declare_on.inc';
9+
} catch (\Exception $e) {
10+
echo "Warning caught\n";
11+
}
12+
include 'fixture/declare_off.inc';
13+
?>
14+
DONE
15+
--EXPECTF--
16+
Warning: Undefined variable $undef in %sno_declare.inc on line 2
17+
Warning caught
18+
19+
Warning: Undefined variable $undef in %sdeclare_off.inc on line 4
20+
DONE
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
--TEST--
2+
php_exception_or_warning_docref test when declare enabled
3+
--SKIPIF--
4+
<?php
5+
if (!class_exists('_ZendTestClass')) die('skip zend_test extension required');
6+
?>
7+
--FILE--
8+
<?php
9+
declare(throw_on_error=1);
10+
11+
try {
12+
zend_throw_on_error_declare_exception_or_warning();
13+
} catch (\Exception $e) {
14+
echo $e->getMessage() . \PHP_EOL;
15+
}
16+
17+
echo "OK";
18+
--EXPECT--
19+
Context dependent
20+
OK
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
--TEST--
2+
php_exception_or_warning_docref test when declare explicitly disable
3+
--SKIPIF--
4+
<?php
5+
if (!class_exists('_ZendTestClass')) die('skip zend_test extension required');
6+
?>
7+
--FILE--
8+
<?php
9+
declare(throw_on_error=0);
10+
11+
zend_throw_on_error_declare_exception_or_warning();
12+
13+
echo "OK";
14+
--EXPECTF--
15+
Warning: zend_throw_on_error_declare_exception_or_warning(): Context dependent in %s on line %d
16+
OK
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
--TEST--
2+
php_exception_or_warning_docref test when declare implicitly disable
3+
--SKIPIF--
4+
<?php
5+
if (!class_exists('_ZendTestClass')) die('skip zend_test extension required');
6+
?>
7+
--FILE--
8+
<?php
9+
10+
zend_throw_on_error_declare_exception_or_warning();
11+
12+
echo "OK";
13+
--EXPECTF--
14+
Warning: zend_throw_on_error_declare_exception_or_warning(): Context dependent in %s on line %d
15+
OK
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<?php
2+
declare(throw_on_error=0);
3+
4+
echo $undef;
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<?php
2+
declare(throw_on_error=1);
3+
4+
echo $undef;
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<?php
2+
echo $undef;
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
--TEST--
2+
Promoted warning by throw_on_error must ignore error_reporting setting
3+
--FILE--
4+
<?php
5+
declare(throw_on_error=1);
6+
ini_set("error_reporting", 0);
7+
try {
8+
echo $undef;
9+
} catch(Exception $e) {
10+
var_dump($e);
11+
}
12+
13+
--EXPECTF--
14+
object(Exception)#1 (7) {
15+
["message":protected]=>
16+
string(25) "Undefined variable $undef"
17+
["string":"Exception":private]=>
18+
string(0) ""
19+
["code":protected]=>
20+
int(2)
21+
["file":protected]=>
22+
string(%d) "%s"
23+
["line":protected]=>
24+
int(5)
25+
["trace":"Exception":private]=>
26+
array(0) {
27+
}
28+
["previous":"Exception":private]=>
29+
NULL
30+
}

0 commit comments

Comments
 (0)