--TEST-- PHP Spec test generated from ./classes/visibility.php --FILE-- vprop1a; // accesses public instance method $c->vprop1b; // accesses public instance method abstract class D1 { public abstract function paf1($p1); abstract protected function paf2(); // private abstract function paf3(); // can't ever provide an implementation public static abstract function pasf1(); protected abstract static function pasf2($p1); } class D2 extends D1 { // public function paf1() {} // Declaration of D2::paf1() must be compatible with D1::paf1($p1) public function paf1($q1) {} // OK; has same visibility as abstract decl, and same signature // public function paf1($q1, $q2) {} // Declaration of D2::paf1() must be compatible with D1::paf1($p1) // protected function paf1($q1) {} // Access level to D2::paf1() must be public // private function paf1($q1) {} // Access level to D2::paf1() must be public // public function paf2() {} // OK; has wider visibility than abstract decl protected function paf2() {} // OK; has same visibility as abstract decl // private function paf2() {} // Access level to D2::paf2() must be protected public static function pasf1() {} // OK; has same visibility as abstract decl // protected static function pasf1() {}// Access level to D2::pasf1() must be public // private static function pasf1() {} // Access level to D2::pasf1() must be public // static public function pasf2($q1) {} // OK; has wider visibility than abstract decl // static protected function pasf2() {} // Declaration of D2::pasf2() must be compatible with D1::pasf2($p1) static protected function pasf2($q1) {} // OK; has same visibility as abstract decl, and same signature // static protected function pasf2($q1, $q2) {} // Declaration of D2::pasf2() must be compatible with D1::pasf2($p1) // static private function pasf2() {$q1} // Access level to D2::pasf2() must be protected } --EXPECTF-- %ACON1: 123