diff --git a/src/Php/CompilerBase.php b/src/Php/CompilerBase.php index 5e002d75..484d7f19 100644 --- a/src/Php/CompilerBase.php +++ b/src/Php/CompilerBase.php @@ -775,6 +775,9 @@ class CompilerBase extends \PhpAot\Core\Translator return $code . '}'; } $var = $this->parseIdentifier($left); + if ($var === 'this_') { + $this->fatalError($left, 'Cannot re-assign $this'); + } $expr = $this->parseExpr($right); if (!$this->hasVar($var)) { diff --git a/tests/core/classes/destructor_and_exceptions.phpt b/tests/core/classes/destructor_and_exceptions.phpt new file mode 100644 index 00000000..9d67ebb7 --- /dev/null +++ b/tests/core/classes/destructor_and_exceptions.phpt @@ -0,0 +1,57 @@ +--TEST-- +ZE2 catch exception thrown in destructor +--FILE-- +getMessage() . "\n"; + } + try + { + throw new FatalException("Damn"); + } + catch(Exception $e) + { + echo "Caught Exception: " . $e->getMessage() . "\n"; + } + catch(FatalException $e) + { + echo "Caught FatalException: " . $e->getMessage() . "\n"; + } +} +?> +--EXPECT-- +FailClass::__destruct +Caught: FailClass +FatalException::__construct +FailClass::__destruct +Caught Exception: FailClass diff --git a/tests/core/classes/factory_001.phpt b/tests/core/classes/factory_001.phpt new file mode 100644 index 00000000..988345aa --- /dev/null +++ b/tests/core/classes/factory_001.phpt @@ -0,0 +1,33 @@ +--TEST-- +ZE2 factory objects +--FILE-- +draw(); + ShapeFactoryMethod("Square")->draw(); +} +?> +--EXPECT-- +Circle +Square diff --git a/tests/core/classes/final.phpt b/tests/core/classes/final.phpt new file mode 100644 index 00000000..95c2028e --- /dev/null +++ b/tests/core/classes/final.phpt @@ -0,0 +1,30 @@ +--TEST-- +ZE2 A method may be redeclared final +--FILE-- +show(); + $t2 = new second(); + $t2->show(); + + echo "Done\n"; +} +?> +--EXPECT-- +Call to function first::show() +Call to function second::show() +Done diff --git a/tests/core/classes/final_abstract.phpt b/tests/core/classes/final_abstract.phpt new file mode 100644 index 00000000..a6d391e7 --- /dev/null +++ b/tests/core/classes/final_abstract.phpt @@ -0,0 +1,16 @@ +--TEST-- +ZE2 A final method cannot be abstract +--SKIPIF-- + +--FILE-- + +--EXPECTF-- +Fatal error: Cannot use the final modifier on an abstract method in %s on line %d diff --git a/tests/core/classes/tostring_002.phpt b/tests/core/classes/tostring_002.phpt new file mode 100644 index 00000000..6b1edb7a --- /dev/null +++ b/tests/core/classes/tostring_002.phpt @@ -0,0 +1,26 @@ +--TEST-- +ZE2 __toString() in __destruct +--FILE-- + +--EXPECT-- +Hello +Hello