2007/08/20
PHPでは実装済みのinterfaceを多重に実装できない
ぶっちゃけ、これバグだろ。と思うけど、bugsにレポートを書けない。いやいやPHP的にバグじゃないならバグじゃない。
PHP
interface Service { } interface SoapService extends Service { public function add(); } class SoapServiceImpl implements SoapService, Service { public function add(){ } }
Java
public interface Service { } public interface SoapService extends Service { public void add(); } public class SoapServiceImpl implements SoapService, Service { public void add() { // TODO Auto-generated method stub } }
んで、PHPにおけるエラー原因がFatal
PHP Fatal error: Class SoapServiceImpl cannot implement previously implemented interface Service
PHPにおけるinterfaceは以前から、ずーーーーと謎だらけなのですが、とりあえずAttributeという位置づけではなさそう
namespaceとかunicodeに熱をあげるのもいいけど、もっと言語的に議論を交わせよ。いい加減。
(5.2.4とかで直ってるといいなぁ)
1 Trackback
[PHP]cannot implement previously implemented interface
via. ハタさんのブログ : PHPでは実装済みのinterfaceを多重に実装できない げ。ホントだ。。。「extendsしたインターフェース」と「その基底インターフェース」を同時にimplementsできないのか。。。 $cat interface.php <?php interface Service { } interface SoapSe
Track from Your Website
http://blog.xole.net/trackback/tb.php?id=589

3 Comments
Re: PHPでは実装済みのinterfaceを多重に実装できない
これってどういう時に必要なのでしょうか?
extendsしているなら、更にimplementsする必要がないような。。。
明示的に行うことによって、ソースの可読性を重視しているといった仕様なのでしょうか?
# そもそもinterfaceにextendsさせたことがないので視点が違うのかも(汗
extendsしたmethodに中身があったら困るからとかそういうことなのかな。。。
From : ヴぇくたー @ 2007-08-21 12:57:18 編集
Re: PHPでは実装済みのinterfaceを多重に実装できない
無駄に implements しているのを教えてくれるっていう意味で、エラーになるのは、むしろありがたいと思います。
ヴぇくたーさん同様、私も「明記したいのかな?」と思いましたが、明記しなくちゃ分かりにくいのもどうなんでしょ?
From : よしりん @ 2007-08-21 21:25:50 編集
Re: PHPでは実装済みのinterfaceを多重に実装できない
>ヴぇくたーさん
>よしりんさん
コメントどもです。
確かに、明記するっていう意味合いもあります。
でも、それがSerializableだったらどうでしょう?
いくつものクラスで実装できると思いますし、同一のメソッドをオーバライドしている分には余計にimplしているとは考えにくいです。
グダグダ長々と書きました。↓
http://blog.xole.net/article.php?id=597
From : ハタ @ 2007-08-22 03:24:44 編集