由於PHP 5.3,你可以使用關鍵字static此
<?php
class A {
public static function newInstance() {
$rv = new static();
return $rv;
}
}
class B extends A { }
class C extends B { }
$o = A::newInstance(); var_dump($o);
$o = B::newInstance(); var_dump($o);
$o = C::newInstance(); var_dump($o);
打印
object(A)#1 (0) {
}
object(B)#2 (0) {
}
object(C)#1 (0) {
}
編輯:另一個(類似的),例如
<?php
class A {
public static function newInstance() {
$rv = new static();
return $rv;
}
public function __construct() { echo " A::__construct\n"; }
}
class B extends A {
public function __construct() { echo " B::__construct\n"; }
}
class C extends B {
public function __construct() { echo " C::__construct\n"; }
}
$types = array('A', 'B', 'C');
foreach($types as $t) {
echo 't=', $t, "\n";
$o = $t::newInstance();
echo ' type of o=', get_class($o), "\n";
}
打印
t=A
A::__construct
type of o=A
t=B
B::__construct
type of o=B
t=C
C::__construct
type of o=C
你是不是缺少'extends'?另外,我不太明白你想做什麼。你能給出一個關於'make_objects'返回的更有說服力的例子嗎? – 2010-08-02 20:40:19
是的,我錯過了延伸。 將會有一個數據庫有無數條表示子類實例的條目,並且make_objects方法會根據給定的條件返回這些實例的某些子集。 basiccaly即時嘗試創建類似於orm工具,但具有一些特定功能,我需要一個項目。 – martijnve 2010-08-02 20:51:36