]> granicus.if.org Git - php/commitdiff
Add more tests that document late static binding
authorjellyNoone <jelly.legend@gmail.com>
Mon, 14 Dec 2020 22:03:12 +0000 (23:03 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Tue, 15 Dec 2020 09:04:39 +0000 (10:04 +0100)
Closes GH-6515.

Zend/tests/lsb_023.phpt [new file with mode: 0644]
Zend/tests/lsb_024.phpt [new file with mode: 0644]

diff --git a/Zend/tests/lsb_023.phpt b/Zend/tests/lsb_023.phpt
new file mode 100644 (file)
index 0000000..a8051aa
--- /dev/null
@@ -0,0 +1,26 @@
+--TEST--
+Late Static Binding static:: calls protected / public method of child class even then
+the method is private in parent class
+--FILE--
+<?php
+class A {
+    public static function out() {
+        echo static::value(), PHP_EOL;
+    }
+
+    private static function value() { return 'A'; }
+}
+class B extends A {
+    protected static function value() { return 'B'; }
+}
+class C extends A {
+    public static function value() { return 'C'; }
+}
+A::out();
+B::out();
+C::out();
+echo PHP_EOL;
+--EXPECT--
+A
+B
+C
diff --git a/Zend/tests/lsb_024.phpt b/Zend/tests/lsb_024.phpt
new file mode 100644 (file)
index 0000000..2c71c67
--- /dev/null
@@ -0,0 +1,25 @@
+--TEST--
+Late Static Binding static:: accesses protected / public static variables of child 
+class when the variable is private in parent class
+--FILE--
+<?php
+class A {
+    private static $value = 'A';
+
+    public static function out() {
+        echo static::$value, PHP_EOL;
+    }
+}
+class B extends A {
+    protected static $value = 'B';
+}
+class C extends A {
+    public static $value = 'C';
+}
+A::out();
+B::out();
+C::out();
+--EXPECT--
+A
+B
+C