2007/08/20

PHPでは実装済みのinterfaceを多重に実装できない

ポスト @ 0:43:23 , 修正 @ 2007/08/20 0:47:15 |     このエントリーを含むはてなブックマーク

ぶっちゃけ、これバグだろ。と思うけど、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

From : Do You PHP はてな @ 2007-08-20 08:17:28

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 編集

Post Your Comment


*は入力必須です。E-Mailは公開されません。

1 + 2 =