--- /dev/null
+--TEST--
+errmsg: Non-abstract method must contain body
+--FILE--
+<?php
+
+abstract class test {
+}
+
+class Impl extends Test {
+ function Foo();
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Non-abstract method Impl::Foo() must contain body in %s on line %d
--- /dev/null
+--TEST--
+errmsg: function cannot be declared private
+--FILE--
+<?php
+
+abstract class test {
+ abstract private function foo() {
+ }
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Abstract function test::foo() cannot be declared private in %s on line %d
--- /dev/null
+--TEST--
+errmsg: cannot reassign $this (by ref)
+--FILE--
+<?php
+
+class test {
+ function foo() {
+ $a = new test;
+ $this = &$a;
+ }
+}
+
+$t = new test;
+$t->foo();
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Cannot re-assign $this in %s on line %d
--- /dev/null
+--TEST--
+errmsg: can't use function return value in write context
+--FILE--
+<?php
+
+function foo() {
+ return "blah";
+}
+
+foo() = 1;
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Can't use function return value in write context in %s on line %d
--- /dev/null
+--TEST--
+errmsg: can't use method return value in write context
+--FILE--
+<?php
+
+class test {
+ function foo() {
+ return "blah";
+ }
+}
+
+$t = new test;
+$t->foo() = 1;
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Can't use method return value in write context in %s on line %d
--- /dev/null
+--TEST--
+errmsg: can't use [] for reading
+--FILE--
+<?php
+
+$a = array();
+$b = $a[];
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Cannot use [] for reading in %s on line %d
--- /dev/null
+--TEST--
+errmsg: can't use [] for reading - 2
+--FILE--
+<?php
+
+$a = array();
+isset($a[]);
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Cannot use [] for reading in %s on line %d
--- /dev/null
+--TEST--
+errmsg: can't use [] for unsetting
+--FILE--
+<?php
+
+$a = array();
+unset($a[]);
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Cannot use [] for unsetting in %s on line %d
--- /dev/null
+--TEST--
+errmsg: multiple access type modifiers are not allowed (properties)
+--FILE--
+<?php
+
+class test {
+ public private $var;
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Multiple access type modifiers are not allowed in %s on line %d
--- /dev/null
+--TEST--
+errmsg: multiple access type modifiers are not allowed (methods)
+--FILE--
+<?php
+
+class test {
+ private protected function foo() {}
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Multiple access type modifiers are not allowed in %s on line %d
--- /dev/null
+--TEST--
+errmsg: cannot redeclare (method)
+--FILE--
+<?php
+
+class test {
+
+ function foo() {}
+ function foo() {}
+
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Cannot redeclare test::foo() in %s on line %d
--- /dev/null
+--TEST--
+errmsg: __autoload() must take exactly 1 argument
+--FILE--
+<?php
+
+function __autoload($a, $b) {}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: __autoload() must take exactly 1 argument in %s on line %d
--- /dev/null
+--TEST--
+errmsg: default value for parameters with array type hint can only be an array or NULL
+--FILE--
+<?php
+
+class test {
+ function foo(array $a = "s") {
+ }
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Default value for parameters with array type hint can only be an array or NULL in %s on line %d
--- /dev/null
+--TEST--
+errmsg: cannot call __clone() method on objects
+--FILE--
+<?php
+
+class test {
+ function __clone() {
+ }
+}
+
+$t = new test;
+$t->__clone();
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Cannot call __clone() method on objects - use 'clone $obj' instead in %s on line %d
--- /dev/null
+--TEST--
+errmsg: __clone() cannot accept any arguments
+--FILE--
+<?php
+
+class test {
+ function __clone($var) {
+ }
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Method test::__clone() cannot accept any arguments in %s on line %d
--- /dev/null
+--TEST--
+errmsg: __isset() must take exactly 1 argument
+--FILE--
+<?php
+
+class test {
+ function __isset() {
+ }
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Method test::__isset() must take exactly 1 argument in %s on line %d
--- /dev/null
+--TEST--
+errmsg: __unset() must take exactly 1 argument
+--FILE--
+<?php
+
+class test {
+ function __unset() {
+ }
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Method test::__unset() must take exactly 1 argument in %s on line %d
--- /dev/null
+--TEST--
+errmsg: static abstract function
+--FILE--
+<?php
+
+class test {
+ static abstract function foo ();
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Strict Standards: Static function test::foo() should not be abstract in %s on line %d
+
+Fatal error: Class test contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (test::foo) in %s on line %d
--- /dev/null
+--TEST--
+errmsg: __destruct() cannot take arguments
+--FILE--
+<?php
+
+class test {
+ function __destruct($var) {
+ }
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Destructor test::__destruct() cannot take arguments in %s on line %d
--- /dev/null
+--TEST--
+errmsg: disabled function
+--INI--
+disable_functions=phpinfo
+--FILE--
+<?php
+
+phpinfo();
+
+echo "Done\n";
+?>
+--EXPECTF--
+Warning: phpinfo() has been disabled for security reasons in %s on line %d
+Done
--- /dev/null
+--TEST--
+errmsg: disabled class
+--INI--
+disable_classes=stdclass
+--FILE--
+<?php
+
+class test extends stdclass {
+}
+
+$t = new test;
+
+echo "Done\n";
+?>
+--EXPECTF--
+Warning: test() has been disabled for security reasons in %s on line %d
+Done
--- /dev/null
+--TEST--
+errmsg: only variables can be passed by reference
+--FILE--
+<?php
+
+function foo (&$var) {
+}
+
+foo(1);
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Only variables can be passed by reference in %s on line %d
--- /dev/null
+--TEST--
+errmsg: access level must be the same or weaker
+--FILE--
+<?php
+
+class test1 {
+ protected $var;
+}
+
+class test extends test1 {
+ private $var;
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Access level to test::$var must be protected (as in class test1) or weaker in %s on line %d
--- /dev/null
+--TEST--
+errmsg: cannot change initial value of property
+--FILE--
+<?php
+
+class test1 {
+ static protected $var = 1;
+}
+
+class test extends test1 {
+ static $var = 10;
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Cannot change initial value of property static protected test1::$var in class test in %s on line %d
--- /dev/null
+--TEST--
+errmsg: cannot inherit previously inherited constant
+--FILE--
+<?php
+
+interface test1 {
+ const FOO = 10;
+}
+
+interface test2 {
+ const FOO = 10;
+}
+
+class test implements test1, test2 {
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Cannot inherit previously-inherited constant FOO from interface test2 in %s on line %d
--- /dev/null
+--TEST--
+errmsg: cannot redeclare class
+--FILE--
+<?php
+
+class stdclass {
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Cannot redeclare class stdclass in %s on line %d
--- /dev/null
+--TEST--
+errmsg: class declarations may not be nested
+--FILE--
+<?php
+
+class test {
+ function foo() {
+ class test2 {
+ }
+ }
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Class declarations may not be nested in %s on line %d
--- /dev/null
+--TEST--
+errmsg: cannot use 'self' as class name
+--FILE--
+<?php
+
+class self {
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Cannot use 'self' as class name as it is reserved in %s on line %d
--- /dev/null
+--TEST--
+errmsg: cannot use 'parent' as class name
+--FILE--
+<?php
+
+class parent {
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Cannot use 'parent' as class name as it is reserved in %s on line %d
--- /dev/null
+--TEST--
+errmsg: cannot use 'self' as parent class name
+--FILE--
+<?php
+
+class test extends self {
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Cannot use 'self' as class name as it is reserved in %s on line %d
--- /dev/null
+--TEST--
+errmsg: cannot use 'parent' as parent class name
+--FILE--
+<?php
+
+class test extends parent {
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Cannot use 'parent' as class name as it is reserved in %s on line %d
--- /dev/null
+--TEST--
+errmsg: __construct() cannot be static
+--FILE--
+<?php
+
+class test {
+
+ static function __construct() {
+ }
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Constructor test::__construct() cannot be static in %s on line %d
--- /dev/null
+--TEST--
+errmsg: __destruct() cannot be static
+--FILE--
+<?php
+
+class test {
+
+ static function __destruct() {
+ }
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Destructor test::__destruct() cannot be static in %s on line %d
--- /dev/null
+--TEST--
+errmsg: __clone() cannot be static
+--FILE--
+<?php
+
+class test {
+
+ static function __clone() {
+ }
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Clone method test::__clone() cannot be static in %s on line %d
--- /dev/null
+--TEST--
+errmsg: cannot use 'self' as interface name
+--FILE--
+<?php
+
+class test implements self {
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Cannot use 'self' as interface name as it is reserved in %s on line %d
--- /dev/null
+--TEST--
+errmsg: cannot use 'parent' as interface name
+--FILE--
+<?php
+
+class test implements parent {
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Cannot use 'parent' as interface name as it is reserved in %s on line %d
--- /dev/null
+--TEST--
+errmsg: properties cannot be abstract
+--FILE--
+<?php
+
+class test {
+ abstract $var = 1;
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Properties cannot be declared abstract in %s on line %d
--- /dev/null
+--TEST--
+errmsg: properties cannot be final
+--FILE--
+<?php
+
+class test {
+ final $var = 1;
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Cannot declare property test::$var final, the final modifier is allowed only for methods in %s on line %d
--- /dev/null
+--TEST--
+errmsg: cannot redeclare property
+--FILE--
+<?php
+
+class test {
+ var $var;
+ var $var;
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Cannot redeclare test::$var in %s on line %d
--- /dev/null
+--TEST--
+errmsg: arrays are not allowed in class constants
+--FILE--
+<?php
+
+class test {
+ const TEST = array(1,2,3);
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Arrays are not allowed in class constants in %s on line %d
--- /dev/null
+--TEST--
+errmsg: instanceof expects an object instance, constant given
+--FILE--
+<?php
+
+var_dump("abc" instanceof stdclass);
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: instanceof expects an object instance, constant given in %s on line %d
--- /dev/null
+--TEST--
+errmsg: key element cannot be a reference
+--FILE--
+<?php
+
+$a = array(1,2,3);
+foreach ($a as &$k=>$v) {
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Key element cannot be a reference in %s on line %d
--- /dev/null
+--TEST--
+errmsg: cannot create references to temp array
+--FILE--
+<?php
+
+foreach (array(1,2,3) as $k=>&$v) {
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+Fatal error: Cannot create references to elements of a temporary array expression in %s on line %d
--- /dev/null
+<?php
+
+var_dump(isset($_SERVER));
+var_dump(empty($_SERVER));
+var_dump(gettype($_SERVER));
+var_dump(count($_SERVER));
+
+var_dump($_SERVER['PHP_SELF']);
+unset($_SERVER['PHP_SELF']);
+var_dump($_SERVER['PHP_SELF']);
+
+unset($_SERVER);
+var_dump($_SERVER);
+
+?>
--- /dev/null
+--TEST--
+globals in global scope
+--INIT--
+variables_order="egpcs"
+--FILE--
+<?php
+
+var_dump(isset($_SERVER));
+var_dump(empty($_SERVER));
+var_dump(gettype($_SERVER));
+var_dump(count($_SERVER));
+
+var_dump($_SERVER['PHP_SELF']);
+unset($_SERVER['PHP_SELF']);
+var_dump($_SERVER['PHP_SELF']);
+
+unset($_SERVER);
+var_dump($_SERVER);
+
+echo "Done\n";
+?>
+--EXPECTF--
+bool(true)
+bool(false)
+string(5) "array"
+int(%d)
+string(%d) "%s"
+
+Notice: Undefined index: PHP_SELF in %s on line %d
+NULL
+
+Notice: Undefined variable: _SERVER in %s on line %d
+NULL
+Done
--- /dev/null
+--TEST--
+globals in local scope
+--INIT--
+variables_order="egpcs"
+--FILE--
+<?php
+function test() {
+ var_dump(isset($_SERVER));
+ var_dump(empty($_SERVER));
+ var_dump(gettype($_SERVER));
+ var_dump(count($_SERVER));
+
+ var_dump($_SERVER['PHP_SELF']);
+ unset($_SERVER['PHP_SELF']);
+ var_dump($_SERVER['PHP_SELF']);
+
+ unset($_SERVER);
+ var_dump($_SERVER);
+}
+
+test();
+
+echo "Done\n";
+?>
+--EXPECTF--
+bool(true)
+bool(false)
+string(5) "array"
+int(%d)
+string(%d) "%s"
+
+Notice: Undefined index: PHP_SELF in %s on line %d
+NULL
+
+Notice: Undefined variable: _SERVER in %s on line %d
+NULL
+Done
--- /dev/null
+--TEST--
+globals in local scope - 2
+--INIT--
+variables_order="egpcs"
+--FILE--
+<?php
+
+class test {
+
+ static function bar() {
+
+ var_dump(isset($_SERVER));
+ var_dump(empty($_SERVER));
+ var_dump(gettype($_SERVER));
+ var_dump(count($_SERVER));
+
+ var_dump($_SERVER['PHP_SELF']);
+ unset($_SERVER['PHP_SELF']);
+ var_dump($_SERVER['PHP_SELF']);
+
+ unset($_SERVER);
+ var_dump($_SERVER);
+
+ }
+}
+
+test::bar();
+
+echo "Done\n";
+?>
+--EXPECTF--
+bool(true)
+bool(false)
+string(5) "array"
+int(%d)
+string(%d) "%s"
+
+Notice: Undefined index: PHP_SELF in %s on line %d
+NULL
+
+Notice: Undefined variable: _SERVER in %s on line %d
+NULL
+Done
--- /dev/null
+--TEST--
+globals in local scope - 3
+--INIT--
+variables_order="egpcs"
+--FILE--
+<?php
+
+function test() {
+ include dirname(__FILE__)."/globals.inc";
+}
+
+test();
+
+echo "Done\n";
+?>
+--EXPECTF--
+bool(true)
+bool(false)
+string(5) "array"
+int(%d)
+string(%d) "%s"
+
+Notice: Undefined index: PHP_SELF in %s on line %d
+NULL
+
+Notice: Undefined variable: _SERVER in %s on line %d
+NULL
+Done