4 回答
TA贡献1802条经验 获得超5个赞
解决此问题的方法非常简单,从设计的角度来看,这实际上是有意义的。正如乔纳森(Jonathan)写道:
使用静态方法扩展任何类也是如此。如果扩展该类并创建具有相同签名的静态方法,则实际上并没有覆盖超类的静态方法。
因此,作为一种解决方法,您可以执行以下操作:
<?php
abstract class MyFoo implements iMyFoo {
public static final function factory($type, $someData) {
// don't forget checking and do whatever else you would
// like to do inside a factory method
$class = get_called_class()."_".$type;
$inst = $class::getInstance($someData);
return $inst;
}
}
interface iMyFoo {
static function factory($type, $someData);
static function getInstance();
function getSomeData();
}
?>
现在,您可以强制所有子类MyFoo的子类都实现一个getInstance静态方法和一个公共的getSomeData方法。而且,如果您不继承MyFoo的子类,则仍然可以实现iMyFoo来创建具有类似功能的类。
TA贡献1712条经验 获得超3个赞
我看不出有什么理由禁止使用静态抽象函数。没有理由禁止使用它们的最好论据是,Java允许使用它们。问题是:-技术上可行吗?-是的,因为它存在于PHP 5.2中,并且存在于Java中。所以可以做到这一点。我们应该这样做吗?-有道理吗?是。实现类的一部分并将类的另一部分留给用户是有意义的。它在非静态函数中有意义,为什么对静态函数不有意义?静态函数的一种用法是不得超过一个实例(单例)的类。例如,加密引擎。它不必在多个实例中都存在,并且有防止这种情况的理由-例如,您只需保护内存的一部分不受入侵者的侵害。因此,实现引擎的一部分并将加密算法留给用户非常有意义。这只是一个例子。如果您习惯于使用静态函数,则会发现更多信息。
- 4 回答
- 0 关注
- 464 浏览
添加回答
举报