2008-12-15 2 views
2

У меня есть следующий код:Может ли PHP сделать довольно тривиальное наследование?

abstract class AbstractParent { 
function __construct($param) { print_r($param); } 
public static function test() { return new self(1234); } 
} 

class SpecificClass extends AbstractParent {} 

Когда я призываю SpecificClass::test(), я получаю сообщение об ошибке:

Fatal error: Cannot instantiate abstract class AbstractParent

Так что я в основном хочу только, чтобы AbstractParent «s класс test() Instantiate, где это test() был вызван из (так, в моем примере, экземпляр SpecificClass).

+0

Я я видел, как люди жалуются на позднюю статическую привязку в последнее время, и мне любопытно: какие другие языки обычно используются для веб-разработки. * do * поддерживают позднюю статическую привязку? Python? Рубин? Perl? Ява? – 2008-12-15 02:39:08

+0

все они, да. Я использовал Ruby в течение последних нескольких лет. – 2008-12-15 02:46:33

ответ

3

Вы можете сделать это в PHP 5.3, который все еще находится в альфе. То, что вы ищете, называется Late-Static-Binding. Вы хотите, чтобы родительский класс ссылался на дочерний класс в статическом методе. Вы не можете сделать это, но это приходит ...

Edit: Вы можете найти более подробную информацию здесь - http://www.php.net/manual/en/language.oop5.late-static-bindings.php

4

Prior версии 5.3 только со следующей работы вокруг:

abstract class AbstractParent { 
function __construct($param) { print_r($param); } 
abstract public static function test(); 
private static function test2($classname) { return new $classname(1234); } 
} 

class SpecificClass extends AbstractParent { 
public static function test() {return self::test2(__CLASS__);} 
} 
Смежные вопросы