D. Dante Lorenso wrote:
All,

I get a fatal error when trying to create a new instance of a derived class from within a static member which exists in the parent base class. I think the problem is related to using this call:

   new self();

Because the 'self' refers to the parent object and not the derived class. See the code below and the error message which follows:

---------- 8< -------------------- 8< -------------------- 8< ----------
<?php
// defines base functions and requires derived class to replace foo()
class A {
   protected abstract function foo();
   public static function bar() {
       $x = new self();
       $x->foo();
   }
}
// defines foo() as it should, but base class doesn't know foo exists
// when it references self()
class B extends A {
   protected function foo() {
       echo "hello world";
   }
}

// show how broken things are
B :: bar();
?>
---------- 8< -------------------- 8< -------------------- 8< ----------

PHP Fatal error: Class A contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (A::foo) in .../demo.php on line 9

This gives the problem away..

http://www.php.net/manual/en/language.oop5.abstract.php

Any class that contains at least one abstract method must also be abstract.

Make 'A' abstract:

abstract class A

--
Postgresql & php tutorials
http://www.designmagick.com/

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to