【发布时间】:2012-01-13 11:00:18
【问题描述】:
可能重复:
Why does PHP 5.2+ disallow abstract static class methods?
Why can't you call abstract functions from abstract classes in PHP?
我在 PHP 5.3.8 上运行此代码:
abstract class Geometry
{
abstract public static function fromArray(array $array);
}
class Point extends Geometry
{
public static function fromArray(array $point)
{
return new self($point[0], $point[1]);
}
}
并收到以下错误:
严格标准:静态函数 Geometry::fromArray() 不应该是抽象的
- 这种方法有什么问题?
- 强制具体类实现此工厂方法的任何可行替代方法?
【问题讨论】:
-
@ajreal:
return new static没有解决问题,也不是我们想要的行为(我想返回一个新的Point,而不是一个新的Geometry) -
@ajreal:类似的问题,但我没有遇到相同的用例,我的代码不会触发该用户面临的致命错误。我的请求专门针对严格标准警告。
-
返回没有
new -
@ajreal:
return static($point[0], $point[1])=> 解析错误:语法错误,意外'(',期待 T_PAAMAYIM_NEKUDOTAYIM -
@rdlowrey:同样的问题,但不同的目标:正如评论员所说,我们可以合理地争辩说他“应该重新设计东西,所以 getSelectSQL() 是一个抽象的 /instance/ 方法”,但我的目标是强制一个具体的类提供一个工厂方法,根据定义,它是static。所以我很乐意至少回答我的第二个问题:“任何可行的替代方案来强制具体类实现这个工厂方法?”
标签: php oop abstract-class php-5.3 factory-method