Может ли PHP сделать довольно тривиальное наследование? - PullRequest
2 голосов
/ 15 декабря 2008

У меня есть следующий код:

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 test() создать экземпляр класса, откуда был вызван этот test() (так, в моем примере, создать экземпляр SpecificClass).

Ответы [ 2 ]

4 голосов
/ 15 декабря 2008

Предыдущая версия 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__);}
}
3 голосов
/ 15 декабря 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...