【发布时间】:2011-03-29 15:04:52
【问题描述】:
我正在研究一个抽象类,以便为几个类节省一些代码。这些类都是通过不同的静态调用实例化自己的工厂。我可以通过将所有这些方法放在一个抽象类中来节省一些代码。
但是,我遇到了后期静态绑定问题...由于我们的网络主机未使用 5.3 或更高版本,我无权访问 get_call_class。如果我有
$class = __CLASS__;
return new $class();
在抽象类中,__CLASS__ 是抽象类的名称,当我真正希望它使用被调用的类时。
我在 Web 上看到了抽象工厂的示例,其中子类具有自己的实例化方法,并且不依赖于抽象父类。然而,在这种情况下,抽象类的唯一原因是为了节省代码,所以如果我不能在那里做,它的价值就会大大降低。
php 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
【问题讨论】:
标签: php abstract-class factory-pattern late-static-binding