===ORIGINAL=== I'm trying to implement what I think is called a "virtual method": my abstract parent class ParentClass defines a method xxx that calls method yyy, but yyy is defined only in ParentClass's children. I can't get this to work (PHP5.0.4). Sample code: === start sample code === abstract class ParentClass { // xxx just returns 5 + whatever yyy() returns public static function xxx () {return 5 + yyy();} // all my children must define yyy() abstract static function yyy(); } abstract class ChildClass extends ParentClass { public static function yyy () {return 7;} } echo ChildClass::xxx(); === end sample code === When I run the above, I get this error: Fatal error: Call to undefined function yyy() in <file> on line 9 Changing the call from yyy() to self::yyy() gives a different error: Fatal error: Cannot call abstract method ParentClass::yyy() in <file> on line 9 How to do this correctly? ===END ORIGINAL=== The following code works..Reasons: 1. both of your classes are abstract 2. In Parent class you cannot referr to yyy() or self::yyy() cause 'self' points to the same class and calling yyy() searches for a global yyy() function. abstract class ParentClass { // xxx just returns 5 + whatever yyy() returns public function xxx () { return 5 + $this->yyy(); } // all my children must define yyy() abstract function yyy(); } class ChildClass extends ParentClass { public function yyy () { return 7; } } $obj=new ChildClass; echo $obj->xxx(); -- Regards Fahad Pervaiz www.ecommerce-xperts.com (Shopping Cart, Web Design, SEO)