From 272b887b7b8d48bc1615938dde825fe4b3af0eb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20Magalh=C3=A3es?= Date: Thu, 16 Apr 2020 18:53:13 +0100 Subject: Ignore inheritance rules on private methods Closes GH-5401 --- tests/classes/clone_005.phpt | 2 +- tests/classes/final_private_ctor.phpt | 21 +++++++++++++++ tests/classes/inheritance_007.phpt | 51 +++++++++++++++++++++++++++++++++++ tests/classes/inheritance_008.phpt | 16 +++++++++++ tests/classes/inheritance_009.phpt | 14 ++++++++++ 5 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 tests/classes/final_private_ctor.phpt create mode 100644 tests/classes/inheritance_007.phpt create mode 100644 tests/classes/inheritance_008.phpt create mode 100644 tests/classes/inheritance_009.phpt (limited to 'tests') diff --git a/tests/classes/clone_005.phpt b/tests/classes/clone_005.phpt index f759221480..b8e3870a8d 100644 --- a/tests/classes/clone_005.phpt +++ b/tests/classes/clone_005.phpt @@ -6,7 +6,7 @@ abstract class base { public $a = 'base'; // disallow cloning once forever - final private function __clone() {} + final protected function __clone() {} } class test extends base { diff --git a/tests/classes/final_private_ctor.phpt b/tests/classes/final_private_ctor.phpt new file mode 100644 index 0000000000..37dbe56c31 --- /dev/null +++ b/tests/classes/final_private_ctor.phpt @@ -0,0 +1,21 @@ +--TEST-- +Final private constructors cannot be overridden +--FILE-- + +--EXPECTF-- +Fatal error: Cannot override final method Base::__construct() in %s on line %d diff --git a/tests/classes/inheritance_007.phpt b/tests/classes/inheritance_007.phpt new file mode 100644 index 0000000000..9115dc00e8 --- /dev/null +++ b/tests/classes/inheritance_007.phpt @@ -0,0 +1,51 @@ +--TEST-- +Ensure private methods with the same name are not checked for inheritance rules - final +--FILE-- +normalPrivate(); + $this->finalPrivate(); + } + function notOverridden_callYourPrivates() { + $this->normalPrivate(); + $this->finalPrivate(); + } + private function normalPrivate() { + echo __METHOD__ . PHP_EOL; + } + final private function finalPrivate() { + echo __METHOD__ . PHP_EOL; + } +} +class B extends A { + function callYourPrivates() { + $this->normalPrivate(); + $this->finalPrivate(); + } + private function normalPrivate() { + echo __METHOD__ . PHP_EOL; + } + final private function finalPrivate() { + echo __METHOD__ . PHP_EOL; + } +} +$a = new A(); +$a->callYourPrivates(); +$a->notOverridden_callYourPrivates(); +$b = new B(); +$b->callYourPrivates(); +$b->notOverridden_callYourPrivates(); +?> +--EXPECTF-- +Warning: Private methods cannot be final as they are never overridden by other classes %s + +Warning: Private methods cannot be final as they are never overridden by other classes %s +A::normalPrivate +A::finalPrivate +A::normalPrivate +A::finalPrivate +B::normalPrivate +B::finalPrivate +A::normalPrivate +A::finalPrivate diff --git a/tests/classes/inheritance_008.phpt b/tests/classes/inheritance_008.phpt new file mode 100644 index 0000000000..2bc2783e2c --- /dev/null +++ b/tests/classes/inheritance_008.phpt @@ -0,0 +1,16 @@ +--TEST-- +Ensure private methods with the same name are not checked for inheritance rules - static +--FILE-- + +--EXPECT-- +OK diff --git a/tests/classes/inheritance_009.phpt b/tests/classes/inheritance_009.phpt new file mode 100644 index 0000000000..042eec7435 --- /dev/null +++ b/tests/classes/inheritance_009.phpt @@ -0,0 +1,14 @@ +--TEST-- +Ensure private methods with the same name are not checked for inheritance rules - abstract +--FILE-- + +--EXPECT-- +OK -- cgit v1.2.1