2011-12-05 32 views
0

Possible Duplicate:
Why does PHP 5.2+ disallow abstract static class methods?
Why can't you call abstract functions from abstract classes in PHP?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]); 
    } 
} 

而且收到以下錯誤:

Strict Standards: Static function Geometry::fromArray() should not be abstract

  • 有什麼不對這種做法?
  • 任何可行的替代方案強制混凝土類來實現這種工廠方法?
+0

return static :: fromArray()? – ajreal

+0

@ajreal:'return new static'沒有解決問題,也不是所需的行爲(我想返回一個新的'Point',而不是一個新的'Geometry') – Benjamin

+0

@ajreal:類似的問題,但我不面對相同的用例,我的代碼不會觸發此用戶所面臨的*致命錯誤。我的要求專門針對嚴格標準警告。 – Benjamin

回答

1

您可以使幾何接口,並有Point實現它嗎?

+0

我的目標是實現[OpenGIS模型](http://dev.mysql.com/doc/refman/5.0/en/opengis-geometry-model。 html),我在'Geometry'類中有一些共同的行爲,因此我必須引入一個int erface只是爲了移除嚴格的標準錯誤:'類幾何實現IGeometry'(即使代碼工作正常,如果我們忽略了警告)。也就是說,我認爲你的解決方案是我唯一離開的! – Benjamin

+0

很高興爲您工作。我不是一個專家,因爲要確定這是一個故意的行爲 - 值得試試5.4看看是否有相同的警告結果? – halfer

+0

*非常有趣,我剛剛嘗試過最新版本的PHP(5.4.0RC3-dev),並且沒有爲此代碼引發E_STRICT錯誤!他們又轉了180°嗎? – Benjamin