25 changed files with 1491 additions and 32 deletions
-
33Zend/tests/grammar/regression_001.phpt
-
22Zend/tests/grammar/regression_002.phpt
-
12Zend/tests/grammar/regression_003.phpt
-
15Zend/tests/grammar/regression_004.phpt
-
14Zend/tests/grammar/regression_005.phpt
-
30Zend/tests/grammar/regression_006.phpt
-
44Zend/tests/grammar/regression_007.phpt
-
21Zend/tests/grammar/regression_008.phpt
-
18Zend/tests/grammar/regression_009.phpt
-
14Zend/tests/grammar/regression_010.phpt
-
18Zend/tests/grammar/regression_011.phpt
-
13Zend/tests/grammar/regression_012.phpt
-
13Zend/tests/grammar/regression_013.phpt
-
188Zend/tests/grammar/semi_reserved_001.phpt
-
186Zend/tests/grammar/semi_reserved_002.phpt
-
210Zend/tests/grammar/semi_reserved_003.phpt
-
210Zend/tests/grammar/semi_reserved_004.phpt
-
189Zend/tests/grammar/semi_reserved_005.phpt
-
80Zend/tests/grammar/semi_reserved_006.phpt
-
37Zend/tests/grammar/semi_reserved_007.phpt
-
68Zend/tests/grammar/semi_reserved_008.phpt
-
25Zend/tests/grammar/semi_reserved_009.phpt
-
31Zend/tests/grammar/semi_reserved_010.phpt
-
16tests/basic/bug51709_1.phpt
-
16tests/basic/bug51709_2.phpt
@ -0,0 +1,33 @@ |
|||
--TEST-- |
|||
Test to check static method calls syntax regression |
|||
--FILE-- |
|||
<?php |
|||
|
|||
class Foo { |
|||
public static function function(){ echo __METHOD__, PHP_EOL; } |
|||
} |
|||
|
|||
Foo::function(); |
|||
|
|||
Foo:: |
|||
function(); |
|||
|
|||
Foo:: |
|||
function(); |
|||
|
|||
|
|||
Foo:: |
|||
function( |
|||
|
|||
); |
|||
|
|||
echo "\nDone\n"; |
|||
|
|||
--EXPECTF-- |
|||
|
|||
Foo::function |
|||
Foo::function |
|||
Foo::function |
|||
Foo::function |
|||
|
|||
Done |
|||
@ -0,0 +1,22 @@ |
|||
--TEST-- |
|||
Test to ensure ::class still works |
|||
--FILE-- |
|||
<?php |
|||
|
|||
class Foo {} |
|||
|
|||
var_dump(Foo::class); |
|||
|
|||
var_dump(Foo:: class); |
|||
|
|||
var_dump(Foo:: CLASS); |
|||
|
|||
var_dump(Foo:: |
|||
|
|||
CLASS); |
|||
|
|||
--EXPECTF-- |
|||
string(3) "Foo" |
|||
string(3) "Foo" |
|||
string(3) "Foo" |
|||
string(3) "Foo" |
|||
@ -0,0 +1,12 @@ |
|||
--TEST-- |
|||
Test to ensure ::class is still reserved in obj scope |
|||
--FILE-- |
|||
<?php |
|||
|
|||
class Obj |
|||
{ |
|||
const CLASS = 'class'; |
|||
} |
|||
|
|||
--EXPECTF-- |
|||
Parse error: syntax error, unexpected 'CLASS' (T_CLASS) in %s on line 5 |
|||
@ -0,0 +1,15 @@ |
|||
--TEST-- |
|||
Test possible function naming regression on procedural scope |
|||
--FILE-- |
|||
<?php |
|||
|
|||
class Obj |
|||
{ |
|||
function echo(){} // valid |
|||
function return(){} // valid |
|||
} |
|||
|
|||
function echo(){} // not valid |
|||
|
|||
--EXPECTF-- |
|||
Parse error: syntax error, unexpected 'echo' (T_ECHO), expecting identifier (T_STRING) or '(' in %s on line 9 |
|||
@ -0,0 +1,14 @@ |
|||
--TEST-- |
|||
Test possible constant naming regression on procedural scope |
|||
--FILE-- |
|||
<?php |
|||
|
|||
class Obj |
|||
{ |
|||
const return = 'yep'; |
|||
} |
|||
|
|||
const return = 'nope'; |
|||
|
|||
--EXPECTF-- |
|||
Parse error: syntax error, unexpected 'return' (T_RETURN), expecting identifier (T_STRING) in %s on line 8 |
|||
@ -0,0 +1,30 @@ |
|||
--TEST-- |
|||
Test to ensure const list syntax declaration works |
|||
--FILE-- |
|||
<?php |
|||
|
|||
class Obj |
|||
{ |
|||
const DECLARE = 'declare', |
|||
RETURN = 'return', |
|||
FUNCTION = 'function', |
|||
USE = 'use'; |
|||
} |
|||
|
|||
echo Obj::DECLARE, PHP_EOL; |
|||
echo Obj::RETURN, PHP_EOL; |
|||
echo Obj::FUNCTION, PHP_EOL; |
|||
echo Obj::USE, PHP_EOL; |
|||
echo Obj:: |
|||
|
|||
USE, PHP_EOL; |
|||
echo "\nDone\n"; |
|||
|
|||
--EXPECTF-- |
|||
declare |
|||
return |
|||
function |
|||
use |
|||
use |
|||
|
|||
Done |
|||
@ -0,0 +1,44 @@ |
|||
--TEST-- |
|||
Test to ensure semi reserved words allow deference |
|||
--FILE-- |
|||
<?php |
|||
|
|||
class Foo { |
|||
const use = 'yay'; |
|||
|
|||
public static function new() { |
|||
echo __METHOD__, PHP_EOL; |
|||
return new static(); |
|||
} |
|||
|
|||
public function self() { |
|||
echo __METHOD__, PHP_EOL; |
|||
return $this; |
|||
} |
|||
} |
|||
|
|||
Foo::new()::new()::new(); |
|||
|
|||
var_dump( |
|||
(new Foo)->self()::new()->self()->self()::use |
|||
); |
|||
|
|||
Foo::{'new'}(); |
|||
|
|||
var_dump(Foo::use); |
|||
|
|||
echo "\nDone\n"; |
|||
|
|||
--EXPECTF-- |
|||
Foo::new |
|||
Foo::new |
|||
Foo::new |
|||
Foo::self |
|||
Foo::new |
|||
Foo::self |
|||
Foo::self |
|||
string(3) "yay" |
|||
Foo::new |
|||
string(3) "yay" |
|||
|
|||
Done |
|||
@ -0,0 +1,21 @@ |
|||
--TEST-- |
|||
Test to check regressions on string interpolation with class members access |
|||
--FILE-- |
|||
<?php |
|||
|
|||
class Friday { |
|||
public $require = "fun"; |
|||
} |
|||
|
|||
$friday = new Friday; |
|||
|
|||
echo "$friday->require ($friday->require) {$friday->require}", PHP_EOL; |
|||
|
|||
echo "\nDone\n"; |
|||
|
|||
|
|||
--EXPECTF-- |
|||
|
|||
fun (fun) fun |
|||
|
|||
Done |
|||
@ -0,0 +1,18 @@ |
|||
--TEST-- |
|||
Test to check regressions on use statements and lexer state |
|||
--FILE-- |
|||
<?php |
|||
|
|||
use A\B\C\D; |
|||
|
|||
class Foo |
|||
{ |
|||
private static $foo; |
|||
|
|||
} |
|||
|
|||
echo PHP_EOL, "Done", PHP_EOL; |
|||
|
|||
--EXPECTF-- |
|||
|
|||
Done |
|||
@ -0,0 +1,14 @@ |
|||
--TEST-- |
|||
Test to check regressions on T_IMPLEMENTS followed by a T_NS_SEPARATOR |
|||
--FILE-- |
|||
<?php |
|||
|
|||
interface A{} |
|||
|
|||
class B implements\A {} |
|||
|
|||
echo "Done", PHP_EOL; |
|||
|
|||
--EXPECTF-- |
|||
|
|||
Done |
|||
@ -0,0 +1,18 @@ |
|||
--TEST-- |
|||
Testing instantiation using namespace:: prefix |
|||
--FILE-- |
|||
<?php |
|||
|
|||
namespace foo; |
|||
|
|||
class bar { |
|||
} |
|||
|
|||
class_alias('foo\bar', 'foo\baz'); |
|||
|
|||
var_dump(new namespace\baz); |
|||
|
|||
?> |
|||
--EXPECTF-- |
|||
object(foo\bar)#%d (0) { |
|||
} |
|||
@ -0,0 +1,13 @@ |
|||
--TEST-- |
|||
Testing for regression on const list syntax and arrays |
|||
--FILE-- |
|||
<?php |
|||
|
|||
class A { |
|||
const A = [1, FOREACH]; |
|||
} |
|||
|
|||
?> |
|||
--EXPECTF-- |
|||
|
|||
Parse error: syntax error, unexpected 'FOREACH' (T_FOREACH), expecting ']' in %s on line %d |
|||
@ -0,0 +1,13 @@ |
|||
--TEST-- |
|||
Testing for regression with encapsed variables in class declaration context |
|||
--FILE-- |
|||
<?php |
|||
|
|||
class A { function foo() { "{${$a}}"; } function list() {} } |
|||
|
|||
echo "Done", PHP_EOL; |
|||
|
|||
?> |
|||
--EXPECTF-- |
|||
|
|||
Done |
|||
@ -0,0 +1,188 @@ |
|||
--TEST-- |
|||
Test semi-reserved words as class methods |
|||
--FILE-- |
|||
<?php |
|||
|
|||
class Obj |
|||
{ |
|||
function empty(){ echo __METHOD__, PHP_EOL; } |
|||
function callable(){ echo __METHOD__, PHP_EOL; } |
|||
function trait(){ echo __METHOD__, PHP_EOL; } |
|||
function extends(){ echo __METHOD__, PHP_EOL; } |
|||
function implements(){ echo __METHOD__, PHP_EOL; } |
|||
function const(){ echo __METHOD__, PHP_EOL; } |
|||
function enddeclare(){ echo __METHOD__, PHP_EOL; } |
|||
function endfor(){ echo __METHOD__, PHP_EOL; } |
|||
function endforeach(){ echo __METHOD__, PHP_EOL; } |
|||
function endif(){ echo __METHOD__, PHP_EOL; } |
|||
function endwhile(){ echo __METHOD__, PHP_EOL; } |
|||
function and(){ echo __METHOD__, PHP_EOL; } |
|||
function global(){ echo __METHOD__, PHP_EOL; } |
|||
function goto(){ echo __METHOD__, PHP_EOL; } |
|||
function instanceof(){ echo __METHOD__, PHP_EOL; } |
|||
function insteadof(){ echo __METHOD__, PHP_EOL; } |
|||
function interface(){ echo __METHOD__, PHP_EOL; } |
|||
function new(){ echo __METHOD__, PHP_EOL; } |
|||
function or(){ echo __METHOD__, PHP_EOL; } |
|||
function xor(){ echo __METHOD__, PHP_EOL; } |
|||
function try(){ echo __METHOD__, PHP_EOL; } |
|||
function use(){ echo __METHOD__, PHP_EOL; } |
|||
function var(){ echo __METHOD__, PHP_EOL; } |
|||
function exit(){ echo __METHOD__, PHP_EOL; } |
|||
function list(){ echo __METHOD__, PHP_EOL; } |
|||
function clone(){ echo __METHOD__, PHP_EOL; } |
|||
function include(){ echo __METHOD__, PHP_EOL; } |
|||
function include_once(){ echo __METHOD__, PHP_EOL; } |
|||
function throw(){ echo __METHOD__, PHP_EOL; } |
|||
function array(){ echo __METHOD__, PHP_EOL; } |
|||
function print(){ echo __METHOD__, PHP_EOL; } |
|||
function echo(){ echo __METHOD__, PHP_EOL; } |
|||
function require(){ echo __METHOD__, PHP_EOL; } |
|||
function require_once(){ echo __METHOD__, PHP_EOL; } |
|||
function return(){ echo __METHOD__, PHP_EOL; } |
|||
function else(){ echo __METHOD__, PHP_EOL; } |
|||
function elseif(){ echo __METHOD__, PHP_EOL; } |
|||
function default(){ echo __METHOD__, PHP_EOL; } |
|||
function break(){ echo __METHOD__, PHP_EOL; } |
|||
function continue(){ echo __METHOD__, PHP_EOL; } |
|||
function switch(){ echo __METHOD__, PHP_EOL; } |
|||
function yield(){ echo __METHOD__, PHP_EOL; } |
|||
function function(){ echo __METHOD__, PHP_EOL; } |
|||
function if(){ echo __METHOD__, PHP_EOL; } |
|||
function endswitch(){ echo __METHOD__, PHP_EOL; } |
|||
function finally(){ echo __METHOD__, PHP_EOL; } |
|||
function for(){ echo __METHOD__, PHP_EOL; } |
|||
function foreach(){ echo __METHOD__, PHP_EOL; } |
|||
function declare(){ echo __METHOD__, PHP_EOL; } |
|||
function case(){ echo __METHOD__, PHP_EOL; } |
|||
function do(){ echo __METHOD__, PHP_EOL; } |
|||
function while(){ echo __METHOD__, PHP_EOL; } |
|||
function as(){ echo __METHOD__, PHP_EOL; } |
|||
function catch(){ echo __METHOD__, PHP_EOL; } |
|||
function die(){ echo __METHOD__, PHP_EOL; } |
|||
function self(){ echo __METHOD__, PHP_EOL; } |
|||
function parent(){ echo __METHOD__, PHP_EOL; } |
|||
} |
|||
|
|||
$obj = new Obj; |
|||
|
|||
$obj->empty(); |
|||
$obj->callable(); |
|||
$obj->trait(); |
|||
$obj->extends(); |
|||
$obj->implements(); |
|||
$obj->const(); |
|||
$obj->enddeclare(); |
|||
$obj->endfor(); |
|||
$obj->endforeach(); |
|||
$obj->endif(); |
|||
$obj->endwhile(); |
|||
$obj->and(); |
|||
$obj->global(); |
|||
$obj->goto(); |
|||
$obj->instanceof(); |
|||
$obj->insteadof(); |
|||
$obj->interface(); |
|||
$obj->new(); |
|||
$obj->or(); |
|||
$obj->xor(); |
|||
$obj->try(); |
|||
$obj->use(); |
|||
$obj->var(); |
|||
$obj->exit(); |
|||
$obj->list(); |
|||
$obj->clone(); |
|||
$obj->include(); |
|||
$obj->include_once(); |
|||
$obj->throw(); |
|||
$obj->array(); |
|||
$obj->print(); |
|||
$obj->echo(); |
|||
$obj->require(); |
|||
$obj->require_once(); |
|||
$obj->return(); |
|||
$obj->else(); |
|||
$obj->elseif(); |
|||
$obj->default(); |
|||
$obj->break(); |
|||
$obj->continue(); |
|||
$obj->switch(); |
|||
$obj->yield(); |
|||
$obj->function(); |
|||
$obj->if(); |
|||
$obj->endswitch(); |
|||
$obj->finally(); |
|||
$obj->for(); |
|||
$obj->foreach(); |
|||
$obj->declare(); |
|||
$obj->case(); |
|||
$obj->do(); |
|||
$obj->while(); |
|||
$obj->as(); |
|||
$obj->catch(); |
|||
$obj->die(); |
|||
$obj->self(); |
|||
$obj->parent(); |
|||
|
|||
echo "\nDone\n"; |
|||
|
|||
--EXPECTF-- |
|||
Obj::empty |
|||
Obj::callable |
|||
Obj::trait |
|||
Obj::extends |
|||
Obj::implements |
|||
Obj::const |
|||
Obj::enddeclare |
|||
Obj::endfor |
|||
Obj::endforeach |
|||
Obj::endif |
|||
Obj::endwhile |
|||
Obj::and |
|||
Obj::global |
|||
Obj::goto |
|||
Obj::instanceof |
|||
Obj::insteadof |
|||
Obj::interface |
|||
Obj::new |
|||
Obj::or |
|||
Obj::xor |
|||
Obj::try |
|||
Obj::use |
|||
Obj::var |
|||
Obj::exit |
|||
Obj::list |
|||
Obj::clone |
|||
Obj::include |
|||
Obj::include_once |
|||
Obj::throw |
|||
Obj::array |
|||
Obj::print |
|||
Obj::echo |
|||
Obj::require |
|||
Obj::require_once |
|||
Obj::return |
|||
Obj::else |
|||
Obj::elseif |
|||
Obj::default |
|||
Obj::break |
|||
Obj::continue |
|||
Obj::switch |
|||
Obj::yield |
|||
Obj::function |
|||
Obj::if |
|||
Obj::endswitch |
|||
Obj::finally |
|||
Obj::for |
|||
Obj::foreach |
|||
Obj::declare |
|||
Obj::case |
|||
Obj::do |
|||
Obj::while |
|||
Obj::as |
|||
Obj::catch |
|||
Obj::die |
|||
Obj::self |
|||
Obj::parent |
|||
|
|||
Done |
|||
@ -0,0 +1,186 @@ |
|||
--TEST-- |
|||
Test semi-reserved words as static class methods |
|||
--FILE-- |
|||
<?php |
|||
|
|||
class Obj |
|||
{ |
|||
static function empty(){ echo __METHOD__, PHP_EOL; } |
|||
static function callable(){ echo __METHOD__, PHP_EOL; } |
|||
static function trait(){ echo __METHOD__, PHP_EOL; } |
|||
static function extends(){ echo __METHOD__, PHP_EOL; } |
|||
static function implements(){ echo __METHOD__, PHP_EOL; } |
|||
static function const(){ echo __METHOD__, PHP_EOL; } |
|||
static function enddeclare(){ echo __METHOD__, PHP_EOL; } |
|||
static function endfor(){ echo __METHOD__, PHP_EOL; } |
|||
static function endforeach(){ echo __METHOD__, PHP_EOL; } |
|||
static function endif(){ echo __METHOD__, PHP_EOL; } |
|||
static function endwhile(){ echo __METHOD__, PHP_EOL; } |
|||
static function and(){ echo __METHOD__, PHP_EOL; } |
|||
static function global(){ echo __METHOD__, PHP_EOL; } |
|||
static function goto(){ echo __METHOD__, PHP_EOL; } |
|||
static function instanceof(){ echo __METHOD__, PHP_EOL; } |
|||
static function insteadof(){ echo __METHOD__, PHP_EOL; } |
|||
static function interface(){ echo __METHOD__, PHP_EOL; } |
|||
static function new(){ echo __METHOD__, PHP_EOL; } |
|||
static function or(){ echo __METHOD__, PHP_EOL; } |
|||
static function xor(){ echo __METHOD__, PHP_EOL; } |
|||
static function try(){ echo __METHOD__, PHP_EOL; } |
|||
static function use(){ echo __METHOD__, PHP_EOL; } |
|||
static function var(){ echo __METHOD__, PHP_EOL; } |
|||
static function exit(){ echo __METHOD__, PHP_EOL; } |
|||
static function list(){ echo __METHOD__, PHP_EOL; } |
|||
static function clone(){ echo __METHOD__, PHP_EOL; } |
|||
static function include(){ echo __METHOD__, PHP_EOL; } |
|||
static function include_once(){ echo __METHOD__, PHP_EOL; } |
|||
static function throw(){ echo __METHOD__, PHP_EOL; } |
|||
static function array(){ echo __METHOD__, PHP_EOL; } |
|||
static function print(){ echo __METHOD__, PHP_EOL; } |
|||
static function echo(){ echo __METHOD__, PHP_EOL; } |
|||
static function require(){ echo __METHOD__, PHP_EOL; } |
|||
static function require_once(){ echo __METHOD__, PHP_EOL; } |
|||
static function return(){ echo __METHOD__, PHP_EOL; } |
|||
static function else(){ echo __METHOD__, PHP_EOL; } |
|||
static function elseif(){ echo __METHOD__, PHP_EOL; } |
|||
static function default(){ echo __METHOD__, PHP_EOL; } |
|||
static function break(){ echo __METHOD__, PHP_EOL; } |
|||
static function continue(){ echo __METHOD__, PHP_EOL; } |
|||
static function switch(){ echo __METHOD__, PHP_EOL; } |
|||
static function yield(){ echo __METHOD__, PHP_EOL; } |
|||
static function function(){ echo __METHOD__, PHP_EOL; } |
|||
static function if(){ echo __METHOD__, PHP_EOL; } |
|||
static function endswitch(){ echo __METHOD__, PHP_EOL; } |
|||
static function finally(){ echo __METHOD__, PHP_EOL; } |
|||
static function for(){ echo __METHOD__, PHP_EOL; } |
|||
static function foreach(){ echo __METHOD__, PHP_EOL; } |
|||
static function declare(){ echo __METHOD__, PHP_EOL; } |
|||
static function case(){ echo __METHOD__, PHP_EOL; } |
|||
static function do(){ echo __METHOD__, PHP_EOL; } |
|||
static function while(){ echo __METHOD__, PHP_EOL; } |
|||
static function as(){ echo __METHOD__, PHP_EOL; } |
|||
static function catch(){ echo __METHOD__, PHP_EOL; } |
|||
static function die(){ echo __METHOD__, PHP_EOL; } |
|||
static function self(){ echo __METHOD__, PHP_EOL; } |
|||
static function parent(){ echo __METHOD__, PHP_EOL; } |
|||
} |
|||
|
|||
Obj::empty(); |
|||
Obj::callable(); |
|||
Obj::trait(); |
|||
Obj::extends(); |
|||
Obj::implements(); |
|||
Obj::const(); |
|||
Obj::enddeclare(); |
|||
Obj::endfor(); |
|||
Obj::endforeach(); |
|||
Obj::endif(); |
|||
Obj::endwhile(); |
|||
Obj::and(); |
|||
Obj::global(); |
|||
Obj::goto(); |
|||
Obj::instanceof(); |
|||
Obj::insteadof(); |
|||
Obj::interface(); |
|||
Obj::new(); |
|||
Obj::or(); |
|||
Obj::xor(); |
|||
Obj::try(); |
|||
Obj::use(); |
|||
Obj::var(); |
|||
Obj::exit(); |
|||
Obj::list(); |
|||
Obj::clone(); |
|||
Obj::include(); |
|||
Obj::include_once(); |
|||
Obj::throw(); |
|||
Obj::array(); |
|||
Obj::print(); |
|||
Obj::echo(); |
|||
Obj::require(); |
|||
Obj::require_once(); |
|||
Obj::return(); |
|||
Obj::else(); |
|||
Obj::elseif(); |
|||
Obj::default(); |
|||
Obj::break(); |
|||
Obj::continue(); |
|||
Obj::switch(); |
|||
Obj::yield(); |
|||
Obj::function(); |
|||
Obj::if(); |
|||
Obj::endswitch(); |
|||
Obj::finally(); |
|||
Obj::for(); |
|||
Obj::foreach(); |
|||
Obj::declare(); |
|||
Obj::case(); |
|||
Obj::do(); |
|||
Obj::while(); |
|||
Obj::as(); |
|||
Obj::catch(); |
|||
Obj::die(); |
|||
Obj::self(); |
|||
Obj::parent(); |
|||
|
|||
echo "\nDone\n"; |
|||
|
|||
--EXPECTF-- |
|||
Obj::empty |
|||
Obj::callable |
|||
Obj::trait |
|||
Obj::extends |
|||
Obj::implements |
|||
Obj::const |
|||
Obj::enddeclare |
|||
Obj::endfor |
|||
Obj::endforeach |
|||
Obj::endif |
|||
Obj::endwhile |
|||
Obj::and |
|||
Obj::global |
|||
Obj::goto |
|||
Obj::instanceof |
|||
Obj::insteadof |
|||
Obj::interface |
|||
Obj::new |
|||
Obj::or |
|||
Obj::xor |
|||
Obj::try |
|||
Obj::use |
|||
Obj::var |
|||
Obj::exit |
|||
Obj::list |
|||
Obj::clone |
|||
Obj::include |
|||
Obj::include_once |
|||
Obj::throw |
|||
Obj::array |
|||
Obj::print |
|||
Obj::echo |
|||
Obj::require |
|||
Obj::require_once |
|||
Obj::return |
|||
Obj::else |
|||
Obj::elseif |
|||
Obj::default |
|||
Obj::break |
|||
Obj::continue |
|||
Obj::switch |
|||
Obj::yield |
|||
Obj::function |
|||
Obj::if |
|||
Obj::endswitch |
|||
Obj::finally |
|||
Obj::for |
|||
Obj::foreach |
|||
Obj::declare |
|||
Obj::case |
|||
Obj::do |
|||
Obj::while |
|||
Obj::as |
|||
Obj::catch |
|||
Obj::die |
|||
Obj::self |
|||
Obj::parent |
|||
|
|||
Done |
|||
@ -0,0 +1,210 @@ |
|||
--TEST-- |
|||
Test semi-reserved words as class properties |
|||
--FILE-- |
|||
<?php |
|||
|
|||
class Obj |
|||
{ |
|||
var $empty = 'empty'; |
|||
var $callable = 'callable'; |
|||
var $class = 'class'; |
|||
var $trait = 'trait'; |
|||
var $extends = 'extends'; |
|||
var $implements = 'implements'; |
|||
var $static = 'static'; |
|||
var $abstract = 'abstract'; |
|||
var $final = 'final'; |
|||
var $public = 'public'; |
|||
var $protected = 'protected'; |
|||
var $private = 'private'; |
|||
var $const = 'const'; |
|||
var $enddeclare = 'enddeclare'; |
|||
var $endfor = 'endfor'; |
|||
var $endforeach = 'endforeach'; |
|||
var $endif = 'endif'; |
|||
var $endwhile = 'endwhile'; |
|||
var $and = 'and'; |
|||
var $global = 'global'; |
|||
var $goto = 'goto'; |
|||
var $instanceof = 'instanceof'; |
|||
var $insteadof = 'insteadof'; |
|||
var $interface = 'interface'; |
|||
var $namespace = 'namespace'; |
|||
var $new = 'new'; |
|||
var $or = 'or'; |
|||
var $xor = 'xor'; |
|||
var $try = 'try'; |
|||
var $use = 'use'; |
|||
var $var = 'var'; |
|||
var $exit = 'exit'; |
|||
var $list = 'list'; |
|||
var $clone = 'clone'; |
|||
var $include = 'include'; |
|||
var $include_once = 'include_once'; |
|||
var $throw = 'throw'; |
|||
var $array = 'array'; |
|||
var $print = 'print'; |
|||
var $echo = 'echo'; |
|||
var $require = 'require'; |
|||
var $require_once = 'require_once'; |
|||
var $return = 'return'; |
|||
var $else = 'else'; |
|||
var $elseif = 'elseif'; |
|||
var $default = 'default'; |
|||
var $break = 'break'; |
|||
var $continue = 'continue'; |
|||
var $switch = 'switch'; |
|||
var $yield = 'yield'; |
|||
var $function = 'function'; |
|||
var $if = 'if'; |
|||
var $endswitch = 'endswitch'; |
|||
var $finally = 'finally'; |
|||
var $for = 'for'; |
|||
var $foreach = 'foreach'; |
|||
var $declare = 'declare'; |
|||
var $case = 'case'; |
|||
var $do = 'do'; |
|||
var $while = 'while'; |
|||
var $as = 'as'; |
|||
var $catch = 'catch'; |
|||
var $die = 'die'; |
|||
var $self = 'self'; |
|||
} |
|||
|
|||
$obj = new Obj; |
|||
|
|||
echo $obj->empty, PHP_EOL; |
|||
echo $obj->callable, PHP_EOL; |
|||
echo $obj->class, PHP_EOL; |
|||
echo $obj->trait, PHP_EOL; |
|||
echo $obj->extends, PHP_EOL; |
|||
echo $obj->implements, PHP_EOL; |
|||
echo $obj->static, PHP_EOL; |
|||
echo $obj->abstract, PHP_EOL; |
|||
echo $obj->final, PHP_EOL; |
|||
echo $obj->public, PHP_EOL; |
|||
echo $obj->protected, PHP_EOL; |
|||
echo $obj->private, PHP_EOL; |
|||
echo $obj->const, PHP_EOL; |
|||
echo $obj->enddeclare, PHP_EOL; |
|||
echo $obj->endfor, PHP_EOL; |
|||
echo $obj->endforeach, PHP_EOL; |
|||
echo $obj->endif, PHP_EOL; |
|||
echo $obj->endwhile, PHP_EOL; |
|||
echo $obj->and, PHP_EOL; |
|||
echo $obj->global, PHP_EOL; |
|||
echo $obj->goto, PHP_EOL; |
|||
echo $obj->instanceof, PHP_EOL; |
|||
echo $obj->insteadof, PHP_EOL; |
|||
echo $obj->interface, PHP_EOL; |
|||
echo $obj->namespace, PHP_EOL; |
|||
echo $obj->new, PHP_EOL; |
|||
echo $obj->or, PHP_EOL; |
|||
echo $obj->xor, PHP_EOL; |
|||
echo $obj->try, PHP_EOL; |
|||
echo $obj->use, PHP_EOL; |
|||
echo $obj->var, PHP_EOL; |
|||
echo $obj->exit, PHP_EOL; |
|||
echo $obj->list, PHP_EOL; |
|||
echo $obj->clone, PHP_EOL; |
|||
echo $obj->include, PHP_EOL; |
|||
echo $obj->include_once, PHP_EOL; |
|||
echo $obj->throw, PHP_EOL; |
|||
echo $obj->array, PHP_EOL; |
|||
echo $obj->print, PHP_EOL; |
|||
echo $obj->echo, PHP_EOL; |
|||
echo $obj->require, PHP_EOL; |
|||
echo $obj->require_once, PHP_EOL; |
|||
echo $obj->return, PHP_EOL; |
|||
echo $obj->else, PHP_EOL; |
|||
echo $obj->elseif, PHP_EOL; |
|||
echo $obj->default, PHP_EOL; |
|||
echo $obj->break, PHP_EOL; |
|||
echo $obj->continue, PHP_EOL; |
|||
echo $obj->switch, PHP_EOL; |
|||
echo $obj->yield, PHP_EOL; |
|||
echo $obj->function, PHP_EOL; |
|||
echo $obj->if, PHP_EOL; |
|||
echo $obj->endswitch, PHP_EOL; |
|||
echo $obj->finally, PHP_EOL; |
|||
echo $obj->for, PHP_EOL; |
|||
echo $obj->foreach, PHP_EOL; |
|||
echo $obj->declare, PHP_EOL; |
|||
echo $obj->case, PHP_EOL; |
|||
echo $obj->do, PHP_EOL; |
|||
echo $obj->while, PHP_EOL; |
|||
echo $obj->as, PHP_EOL; |
|||
echo $obj->catch, PHP_EOL; |
|||
echo $obj->die, PHP_EOL; |
|||
echo $obj->self, PHP_EOL; |
|||
|
|||
echo "\nDone\n"; |
|||
|
|||
?> |
|||
--EXPECTF-- |
|||
empty |
|||
callable |
|||
class |
|||
trait |
|||
extends |
|||
implements |
|||
static |
|||
abstract |
|||
final |
|||
public |
|||
protected |
|||
private |
|||
const |
|||
enddeclare |
|||
endfor |
|||
endforeach |
|||
endif |
|||
endwhile |
|||
and |
|||
global |
|||
goto |
|||
instanceof |
|||
insteadof |
|||
interface |
|||
namespace |
|||
new |
|||
or |
|||
xor |
|||
try |
|||
use |
|||
var |
|||
exit |
|||
list |
|||
clone |
|||
include |
|||
include_once |
|||
throw |
|||
array |
|||
print |
|||
echo |
|||
require |
|||
require_once |
|||
return |
|||
else |
|||
elseif |
|||
default |
|||
break |
|||
continue |
|||
switch |
|||
yield |
|||
function |
|||
if |
|||
endswitch |
|||
finally |
|||
for |
|||
foreach |
|||
declare |
|||
case |
|||
do |
|||
while |
|||
as |
|||
catch |
|||
die |
|||
self |
|||
|
|||
Done |
|||
@ -0,0 +1,210 @@ |
|||
--TEST-- |
|||
Test semi-reserved words as static class properties |
|||
--FILE-- |
|||
<?php |
|||
|
|||
class Obj |
|||
{ |
|||
static $empty = 'empty'; |
|||
static $callable = 'callable'; |
|||
static $class = 'class'; |
|||
static $trait = 'trait'; |
|||
static $extends = 'extends'; |
|||
static $implements = 'implements'; |
|||
static $static = 'static'; |
|||
static $abstract = 'abstract'; |
|||
static $final = 'final'; |
|||
static $public = 'public'; |
|||
static $protected = 'protected'; |
|||
static $private = 'private'; |
|||
static $const = 'const'; |
|||
static $enddeclare = 'enddeclare'; |
|||
static $endfor = 'endfor'; |
|||
static $endforeach = 'endforeach'; |
|||
static $endif = 'endif'; |
|||
static $endwhile = 'endwhile'; |
|||
static $and = 'and'; |
|||
static $global = 'global'; |
|||
static $goto = 'goto'; |
|||
static $instanceof = 'instanceof'; |
|||
static $insteadof = 'insteadof'; |
|||
static $interface = 'interface'; |
|||
static $namespace = 'namespace'; |
|||
static $new = 'new'; |
|||
static $or = 'or'; |
|||
static $xor = 'xor'; |
|||
static $try = 'try'; |
|||
static $use = 'use'; |
|||
static $var = 'var'; |
|||
static $exit = 'exit'; |
|||
static $list = 'list'; |
|||
static $clone = 'clone'; |
|||
static $include = 'include'; |
|||
static $include_once = 'include_once'; |
|||
static $throw = 'throw'; |
|||
static $array = 'array'; |
|||
static $print = 'print'; |
|||
static $echo = 'echo'; |
|||
static $require = 'require'; |
|||
static $require_once = 'require_once'; |
|||
static $return = 'return'; |
|||
static $else = 'else'; |
|||
static $elseif = 'elseif'; |
|||
static $default = 'default'; |
|||
static $break = 'break'; |
|||
static $continue = 'continue'; |
|||
static $switch = 'switch'; |
|||
static $yield = 'yield'; |
|||
static $function = 'function'; |
|||
static $if = 'if'; |
|||
static $endswitch = 'endswitch'; |
|||
static $finally = 'finally'; |
|||
static $for = 'for'; |
|||
static $foreach = 'foreach'; |
|||
static $declare = 'declare'; |
|||
static $case = 'case'; |
|||
static $do = 'do'; |
|||
static $while = 'while'; |
|||
static $as = 'as'; |
|||
static $catch = 'catch'; |
|||
static $die = 'die'; |
|||
static $self = 'self'; |
|||
static $parent = 'parent'; |
|||
} |
|||
|
|||
echo Obj::$empty, PHP_EOL; |
|||
echo Obj::$callable, PHP_EOL; |
|||
echo Obj::$class, PHP_EOL; |
|||
echo Obj::$trait, PHP_EOL; |
|||
echo Obj::$extends, PHP_EOL; |
|||
echo Obj::$implements, PHP_EOL; |
|||
echo Obj::$static, PHP_EOL; |
|||
echo Obj::$abstract, PHP_EOL; |
|||
echo Obj::$final, PHP_EOL; |
|||
echo Obj::$public, PHP_EOL; |
|||
echo Obj::$protected, PHP_EOL; |
|||
echo Obj::$private, PHP_EOL; |
|||
echo Obj::$const, PHP_EOL; |
|||
echo Obj::$enddeclare, PHP_EOL; |
|||
echo Obj::$endfor, PHP_EOL; |
|||
echo Obj::$endforeach, PHP_EOL; |
|||
echo Obj::$endif, PHP_EOL; |
|||
echo Obj::$endwhile, PHP_EOL; |
|||
echo Obj::$and, PHP_EOL; |
|||
echo Obj::$global, PHP_EOL; |
|||
echo Obj::$goto, PHP_EOL; |
|||
echo Obj::$instanceof, PHP_EOL; |
|||
echo Obj::$insteadof, PHP_EOL; |
|||
echo Obj::$interface, PHP_EOL; |
|||
echo Obj::$namespace, PHP_EOL; |
|||
echo Obj::$new, PHP_EOL; |
|||
echo Obj::$or, PHP_EOL; |
|||
echo Obj::$xor, PHP_EOL; |
|||
echo Obj::$try, PHP_EOL; |
|||
echo Obj::$use, PHP_EOL; |
|||
echo Obj::$var, PHP_EOL; |
|||
echo Obj::$exit, PHP_EOL; |
|||
echo Obj::$list, PHP_EOL; |
|||
echo Obj::$clone, PHP_EOL; |
|||
echo Obj::$include, PHP_EOL; |
|||
echo Obj::$include_once, PHP_EOL; |
|||
echo Obj::$throw, PHP_EOL; |
|||
echo Obj::$array, PHP_EOL; |
|||
echo Obj::$print, PHP_EOL; |
|||
echo Obj::$echo, PHP_EOL; |
|||
echo Obj::$require, PHP_EOL; |
|||
echo Obj::$require_once, PHP_EOL; |
|||
echo Obj::$return, PHP_EOL; |
|||
echo Obj::$else, PHP_EOL; |
|||
echo Obj::$elseif, PHP_EOL; |
|||
echo Obj::$default, PHP_EOL; |
|||
echo Obj::$break, PHP_EOL; |
|||
echo Obj::$continue, PHP_EOL; |
|||
echo Obj::$switch, PHP_EOL; |
|||
echo Obj::$yield, PHP_EOL; |
|||
echo Obj::$function, PHP_EOL; |
|||
echo Obj::$if, PHP_EOL; |
|||
echo Obj::$endswitch, PHP_EOL; |
|||
echo Obj::$finally, PHP_EOL; |
|||
echo Obj::$for, PHP_EOL; |
|||
echo Obj::$foreach, PHP_EOL; |
|||
echo Obj::$declare, PHP_EOL; |
|||
echo Obj::$case, PHP_EOL; |
|||
echo Obj::$do, PHP_EOL; |
|||
echo Obj::$while, PHP_EOL; |
|||
echo Obj::$as, PHP_EOL; |
|||
echo Obj::$catch, PHP_EOL; |
|||
echo Obj::$die, PHP_EOL; |
|||
echo Obj::$self, PHP_EOL; |
|||
echo Obj::$parent, PHP_EOL; |
|||
|
|||
echo "\nDone\n"; |
|||
|
|||
--EXPECTF-- |
|||
empty |
|||
callable |
|||
class |
|||
trait |
|||
extends |
|||
implements |
|||
static |
|||
abstract |
|||
final |
|||
public |
|||
protected |
|||
private |
|||
const |
|||
enddeclare |
|||
endfor |
|||
endforeach |
|||
endif |
|||
endwhile |
|||
and |
|||
global |
|||
goto |
|||
instanceof |
|||
insteadof |
|||
interface |
|||
namespace |
|||
new |
|||
or |
|||
xor |
|||
try |
|||
use |
|||
var |
|||
exit |
|||
list |
|||
clone |
|||
include |
|||
include_once |
|||
throw |
|||
array |
|||
print |
|||
echo |
|||
require |
|||
require_once |
|||
return |
|||
else |
|||
elseif |
|||
default |
|||
break |
|||
continue |
|||
switch |
|||
yield |
|||
function |
|||
if |
|||
endswitch |
|||
finally |
|||
for |
|||
foreach |
|||
declare |
|||
case |
|||
do |
|||
while |
|||
as |
|||
catch |
|||
die |
|||
self |
|||
parent |
|||
|
|||
Done |
|||
@ -0,0 +1,189 @@ |
|||
--TEST-- |
|||
Test semi-reserved words as class constants |
|||
--FILE-- |
|||
<?php |
|||
|
|||
class Obj |
|||
{ |
|||
const EMPTY = 'empty'; |
|||
const CALLABLE = 'callable'; |
|||
const TRAIT = 'trait'; |
|||
const EXTENDS = 'extends'; |
|||
const IMPLEMENTS = 'implements'; |
|||
const CONST = 'const'; |
|||
const ENDDECLARE = 'enddeclare'; |
|||
const ENDFOR = 'endfor'; |
|||
const ENDFOREACH = 'endforeach'; |
|||
const ENDIF = 'endif'; |
|||
const ENDWHILE = 'endwhile'; |
|||
const AND = 'and'; |
|||
const GLOBAL = 'global'; |
|||
const GOTO = 'goto'; |
|||
const INSTANCEOF = 'instanceof'; |
|||
const INSTEADOF = 'insteadof'; |
|||
const INTERFACE = 'interface'; |
|||
const NAMESPACE = 'namespace'; |
|||
const NEW = 'new'; |
|||
const OR = 'or'; |
|||
const XOR = 'xor'; |
|||
const TRY = 'try'; |
|||
const USE = 'use'; |
|||
const VAR = 'var'; |
|||
const EXIT = 'exit'; |
|||
const LIST = 'list'; |
|||
const CLONE = 'clone'; |
|||
const INCLUDE = 'include'; |
|||
const INCLUDE_ONCE = 'include_once'; |
|||
const THROW = 'throw'; |
|||
const ARRAY = 'array'; |
|||
const PRINT = 'print'; |
|||
const ECHO = 'echo'; |
|||
const REQUIRE = 'require'; |
|||
const REQUIRE_ONCE = 'require_once'; |
|||
const RETURN = 'return'; |
|||
const ELSE = 'else'; |
|||
const ELSEIF = 'elseif'; |
|||
const DEFAULT = 'default'; |
|||
const BREAK = 'break'; |
|||
const CONTINUE = 'continue'; |
|||
const SWITCH = 'switch'; |
|||
const YIELD = 'yield'; |
|||
const FUNCTION = 'function'; |
|||
const IF = 'if'; |
|||
const ENDSWITCH = 'endswitch'; |
|||
const FINALLY = 'finally'; |
|||
const FOR = 'for'; |
|||
const FOREACH = 'foreach'; |
|||
const DECLARE = 'declare'; |
|||
const CASE = 'case'; |
|||
const DO = 'do'; |
|||
const WHILE = 'while'; |
|||
const AS = 'as'; |
|||
const CATCH = 'catch'; |
|||
const DIE = 'die'; |
|||
const SELF = 'self'; |
|||
const PARENT = 'parent'; |
|||
} |
|||
|
|||
echo Obj::EMPTY, PHP_EOL; |
|||
echo Obj::CALLABLE, PHP_EOL; |
|||
echo Obj::TRAIT, PHP_EOL; |
|||
echo Obj::EXTENDS, PHP_EOL; |
|||
echo Obj::IMPLEMENTS, PHP_EOL; |
|||
echo Obj::CONST, PHP_EOL; |
|||
echo Obj::ENDDECLARE, PHP_EOL; |
|||
echo Obj::ENDFOR, PHP_EOL; |
|||
echo Obj::ENDFOREACH, PHP_EOL; |
|||
echo Obj::ENDIF, PHP_EOL; |
|||
echo Obj::ENDWHILE, PHP_EOL; |
|||
echo Obj::AND, PHP_EOL; |
|||
echo Obj::GLOBAL, PHP_EOL; |
|||
echo Obj::GOTO, PHP_EOL; |
|||
echo Obj::INSTANCEOF, PHP_EOL; |
|||
echo Obj::INSTEADOF, PHP_EOL; |
|||
echo Obj::INTERFACE, PHP_EOL; |
|||
echo Obj::NAMESPACE, PHP_EOL; |
|||
echo Obj::NEW, PHP_EOL; |
|||
echo Obj::OR, PHP_EOL; |
|||
echo Obj::XOR, PHP_EOL; |
|||
echo Obj::TRY, PHP_EOL; |
|||
echo Obj::USE, PHP_EOL; |
|||
echo Obj::VAR, PHP_EOL; |
|||
echo Obj::EXIT, PHP_EOL; |
|||
echo Obj::LIST, PHP_EOL; |
|||
echo Obj::CLONE, PHP_EOL; |
|||
echo Obj::INCLUDE, PHP_EOL; |
|||
echo Obj::INCLUDE_ONCE, PHP_EOL; |
|||
echo Obj::THROW, PHP_EOL; |
|||
echo Obj::ARRAY, PHP_EOL; |
|||
echo Obj::PRINT, PHP_EOL; |
|||
echo Obj::ECHO, PHP_EOL; |
|||
echo Obj::REQUIRE, PHP_EOL; |
|||
echo Obj::REQUIRE_ONCE, PHP_EOL; |
|||
echo Obj::RETURN, PHP_EOL; |
|||
echo Obj::ELSE, PHP_EOL; |
|||
echo Obj::ELSEIF, PHP_EOL; |
|||
echo Obj::DEFAULT, PHP_EOL; |
|||
echo Obj::BREAK, PHP_EOL; |
|||
echo Obj::CONTINUE, PHP_EOL; |
|||
echo Obj::SWITCH, PHP_EOL; |
|||
echo Obj::YIELD, PHP_EOL; |
|||
echo Obj::FUNCTION, PHP_EOL; |
|||
echo Obj::IF, PHP_EOL; |
|||
echo Obj::ENDSWITCH, PHP_EOL; |
|||
echo Obj::FINALLY, PHP_EOL; |
|||
echo Obj::FOR, PHP_EOL; |
|||
echo Obj::FOREACH, PHP_EOL; |
|||
echo Obj::DECLARE, PHP_EOL; |
|||
echo Obj::CASE, PHP_EOL; |
|||
echo Obj::DO, PHP_EOL; |
|||
echo Obj::WHILE, PHP_EOL; |
|||
echo Obj::AS, PHP_EOL; |
|||
echo Obj::CATCH, PHP_EOL; |
|||
echo Obj::DIE, PHP_EOL; |
|||
echo Obj::SELF, PHP_EOL; |
|||
echo Obj::PARENT, PHP_EOL; |
|||
|
|||
echo "\nDone\n"; |
|||
|
|||
--EXPECTF-- |
|||
empty |
|||
callable |
|||
trait |
|||
extends |
|||
implements |
|||
const |
|||
enddeclare |
|||
endfor |
|||
endforeach |
|||
endif |
|||
endwhile |
|||
and |
|||
global |
|||
goto |
|||
instanceof |
|||
insteadof |
|||
interface |
|||
namespace |
|||
new |
|||
or |
|||
xor |
|||
try |
|||
use |
|||
var |
|||
exit |
|||
list |
|||
clone |
|||
include |
|||
include_once |
|||
throw |
|||
array |
|||
print |
|||
echo |
|||
require |
|||
require_once |
|||
return |
|||
else |
|||
elseif |
|||
default |
|||
break |
|||
continue |
|||
switch |
|||
yield |
|||
function |
|||
if |
|||
endswitch |
|||
finally |
|||
for |
|||
foreach |
|||
declare |
|||
case |
|||
do |
|||
while |
|||
as |
|||
catch |
|||
die |
|||
self |
|||
parent |
|||
|
|||
Done |
|||
@ -0,0 +1,80 @@ |
|||
--TEST-- |
|||
Test semi-reserved method and constant names and trait conflict resolution |
|||
--FILE-- |
|||
<?php |
|||
|
|||
trait TraitA |
|||
{ |
|||
public function catch(){ echo __METHOD__, PHP_EOL; } |
|||
private function list(){ echo __METHOD__, PHP_EOL; } |
|||
} |
|||
|
|||
trait TraitB |
|||
{ |
|||
static $list = ['a' => ['b' => ['c']]]; |
|||
|
|||
public static function catch(){ echo __METHOD__, PHP_EOL; } |
|||
private static function throw(){ echo __METHOD__, PHP_EOL; } |
|||
private static function self(){ echo __METHOD__, PHP_EOL; } |
|||
} |
|||
|
|||
trait TraitC |
|||
{ |
|||
public static function exit(){ echo __METHOD__, PHP_EOL; } |
|||
protected static function try(){ echo __METHOD__, PHP_EOL; } |
|||
} |
|||
|
|||
class Foo |
|||
{ |
|||
use TraitA, TraitB { |
|||
TraitA |
|||
:: |
|||
catch insteadof namespace\TraitB; |
|||
TraitA::list as public foreach; |
|||
TraitB::throw as public; |
|||
TraitB::self as public; |
|||
} |
|||
|
|||
use TraitC { |
|||
try as public attempt; |
|||
exit as die; |
|||
\TraitC::exit as bye; |
|||
namespace\TraitC::exit as byebye; |
|||
TraitC |
|||
:: |
|||
exit as farewell; |
|||
} |
|||
} |
|||
|
|||
(new Foo)->catch(); |
|||
(new Foo)->foreach(); |
|||
Foo::throw(); |
|||
Foo::self(); |
|||
var_dump(Foo::$list['a']); |
|||
Foo::attempt(); |
|||
Foo::die(); |
|||
Foo::bye(); |
|||
Foo::byebye(); |
|||
Foo::farewell(); |
|||
|
|||
echo "\nDone\n"; |
|||
|
|||
--EXPECTF-- |
|||
TraitA::catch |
|||
TraitA::list |
|||
TraitB::throw |
|||
TraitB::self |
|||
array(1) { |
|||
["b"]=> |
|||
array(1) { |
|||
[0]=> |
|||
string(1) "c" |
|||
} |
|||
} |
|||
TraitC::try |
|||
TraitC::exit |
|||
TraitC::exit |
|||
TraitC::exit |
|||
TraitC::exit |
|||
|
|||
Done |
|||
@ -0,0 +1,37 @@ |
|||
--TEST-- |
|||
Edge case: self::self, self::parent, parent::self semi reserved constants access |
|||
--FILE-- |
|||
<?php |
|||
|
|||
class Foo { |
|||
const self = "self"; |
|||
const parent = "parent"; |
|||
public function __construct() { |
|||
echo "From ", __METHOD__, ":", PHP_EOL; |
|||
echo self::self, PHP_EOL; |
|||
echo self::parent, PHP_EOL; |
|||
} |
|||
} |
|||
|
|||
class Bar extends Foo { |
|||
public function __construct() { |
|||
parent::__construct(); |
|||
echo "From ", __METHOD__, ":", PHP_EOL; |
|||
echo parent::self, PHP_EOL; |
|||
echo parent::parent, PHP_EOL; |
|||
} |
|||
} |
|||
|
|||
new Bar; |
|||
|
|||
echo "\nDone\n"; |
|||
|
|||
--EXPECTF-- |
|||
From Foo::__construct: |
|||
self |
|||
parent |
|||
From Bar::__construct: |
|||
self |
|||
parent |
|||
|
|||
Done |
|||
@ -0,0 +1,68 @@ |
|||
--TEST-- |
|||
Testing with comments around semi-reserved names (not intended to be legible) |
|||
--FILE-- |
|||
<?php |
|||
|
|||
trait TraitA |
|||
{ |
|||
public static function list(){ echo __METHOD__, PHP_EOL; } |
|||
public static function /* comment */ catch(){ echo __METHOD__, PHP_EOL; } |
|||
private static function // comment |
|||
throw(){ echo __METHOD__, PHP_EOL; } |
|||
private static function |
|||
# comment |
|||
self(){ echo __METHOD__, PHP_EOL; } |
|||
} |
|||
|
|||
trait TraitB |
|||
{ |
|||
public static function exit(){ echo __METHOD__, PHP_EOL; } |
|||
protected static function try(){ echo __METHOD__, PHP_EOL; } |
|||
} |
|||
|
|||
class Foo |
|||
{ |
|||
use TraitA { |
|||
TraitA:: |
|||
// |
|||
/** doc comment */ |
|||
# |
|||
catch /* comment */ |
|||
// comment |
|||
# comment |
|||
insteadof TraitB; |
|||
|
|||
TraitA::list as public /**/ foreach; |
|||
} |
|||
|
|||
use TraitB { |
|||
try /*comment*/ as public attempt; |
|||
exit // comment |
|||
as/*comment*/die; // non qualified |
|||
\TraitB::exit as bye; // full qualified |
|||
namespace\TraitB::exit # |
|||
as byebye; // even more full qualified |
|||
TraitB |
|||
:: |
|||
/** */ |
|||
exit as farewell; // full qualified with weird spacing |
|||
} |
|||
} |
|||
|
|||
Foo /**/ |
|||
# |
|||
// |
|||
/** */ |
|||
:: |
|||
/**/ |
|||
# |
|||
// |
|||
/** */ |
|||
attempt(); |
|||
|
|||
echo PHP_EOL, "Done", PHP_EOL; |
|||
|
|||
--EXPECTF-- |
|||
TraitB::try |
|||
|
|||
Done |
|||
@ -0,0 +1,25 @@ |
|||
--TEST-- |
|||
Edge case: T_STRING<as> as T_STRING<?> |
|||
--FILE-- |
|||
<?php |
|||
|
|||
trait TraitA |
|||
{ |
|||
public static function as(){ echo __METHOD__, PHP_EOL; } |
|||
} |
|||
|
|||
class Foo |
|||
{ |
|||
use TraitA { |
|||
as as try; |
|||
} |
|||
} |
|||
|
|||
Foo::try(); |
|||
|
|||
echo PHP_EOL, "Done", PHP_EOL; |
|||
|
|||
--EXPECTF-- |
|||
TraitA::as |
|||
|
|||
Done |
|||
@ -0,0 +1,31 @@ |
|||
--TEST-- |
|||
Edge case: T_STRING<insteadof> insteadof T_STRING<?> |
|||
--FILE-- |
|||
<?php |
|||
|
|||
trait TraitA |
|||
{ |
|||
public static function insteadof(){ echo __METHOD__, PHP_EOL; } |
|||
} |
|||
|
|||
trait TraitB |
|||
{ |
|||
public static function insteadof(){ echo __METHOD__, PHP_EOL; } |
|||
} |
|||
|
|||
class Foo |
|||
{ |
|||
use TraitA , TraitB { |
|||
TraitB::insteadof |
|||
insteadof TraitA; |
|||
} |
|||
} |
|||
|
|||
Foo::insteadof(); |
|||
|
|||
echo PHP_EOL, "Done", PHP_EOL; |
|||
|
|||
--EXPECTF-- |
|||
TraitB::insteadof |
|||
|
|||
Done |
|||
@ -1,16 +0,0 @@ |
|||
--TEST-- |
|||
Bug #51709 (Can't use keywords as method names) |
|||
--FILE-- |
|||
<?php |
|||
|
|||
class foo { |
|||
static function for() { |
|||
echo "1"; |
|||
} |
|||
} |
|||
|
|||
?> |
|||
===DONE=== |
|||
<?php exit(0); ?> |
|||
--EXPECTF-- |
|||
Parse error: syntax error, unexpected %s, expecting %s in %sbug51709_1.php on line %d |
|||
@ -1,16 +0,0 @@ |
|||
--TEST-- |
|||
Bug #51709 (Can't use keywords as method names) |
|||
--FILE-- |
|||
<?php |
|||
|
|||
class foo { |
|||
static function goto() { |
|||
echo "1"; |
|||
} |
|||
} |
|||
|
|||
?> |
|||
===DONE=== |
|||
<?php exit(0); ?> |
|||
--EXPECTF-- |
|||
Parse error: syntax error, unexpected %s, expecting %s in %sbug51709_2.php on line %d |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue