我正在研究一个抽象类,以节省几个类的一些代码。这些类都是通过不同的静态调用实例化自己的工厂。我可以通过将所有这些方法放在一个抽象类中来节省一些代码。
但是,我遇到了后期静态绑定问题……因为我们的网络主机没有使用 5.3 或更高版本,所以我无权访问 get_call_class。如果我有
$class = __CLASS__;
return new $class();
在抽象类中,__CLASS__
是抽象类的名称,当我真正希望它使用被调用的类时。
我在网络上看到过抽象工厂的例子,其中子类有自己的实例化方法,并且不依赖抽象父类。然而,在这种情况下,抽象类的唯一原因是为了节省代码,所以如果我不能在那里做,它的价值就会大大降低。
php < 5.3 中有解决方法吗?debug_backtrace()
?
编辑:
我做了一个测试,它似乎debug_backtrace()
不起作用!我想这就是我们需要后期静态绑定的原因。
<?
abstract class abstractFactory {
public function create() {
print_r(debug_backtrace());
$class = __CLASS__;
return new $class();
}
}
class concreteFactory extends abstractFactory {}
$chimborazo = concreteFactory::create();
结果:
$ php test.php
Array
(
[0] => Array
(
[file] => /var/www/test.php
[line] => 13
[function] => create
[class] => abstractFactory
[type] => ::
[args] => Array
(
)
)
)
Fatal error: Cannot instantiate abstract class abstractFactory in /var/www/test.php on line 7