print $this->getValue($dd) . "\n"; } } class ConcreteClass1 extends AbstractClass { protected function getValue($dd) { return "ConcreteClass1 " . $dd . ' line 21 '; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass1"; } } class ConcreteClass2 extends AbstractClass { public function getValue($dd) { return "ConcreteClass2 " . $dd . ' line 32 '; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass2"; } } $class1 = new ConcreteClass1(); $class1->printOut(); echo $class1->prefixValue('FOO_') . "\n"; $class2 = new ConcreteClass2(); $class2->printOut(); echo $class2->prefixValue('FOO_') . "\n";
} } /******************************************************************************/ class ConcreteClass2 extends AbstractClass implements InterfaceClass { public function myNewInterface($stuff) { return "A new interface here - {$stuff}"; } public function getValue() { return "ConcreteClass2"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass2"; } public function printOut() { print "OVERRIDE: Your subconscious robot.\n"; } } /******************************************************************************/ $class1 = new ConcreteClass1(); $class1->printOut(); echo $class1->prefixValue('FOO_') . "\n"; /******************************************************************************/ $class2 = new ConcreteClass2(); $class2->printOut(); echo $class2->prefixValue('FOO_') . "\n"; echo $class2->myNewInterface('yolo') . "\n";