PHP5.2では実装済みのinterfaceを多重に実装できないらしい
http://blog.xole.net/article.php?id=589
via: http://d.hatena.ne.jp/shimooka/20070820/1187565051
$ php -v PHP 5.2.0-8+etch7 (cli) (built: Jul 2 2007 21:46:15) Copyright (c) 1997-2006 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2006 Zend Technologies $ cat interface.php <?php interface Service { } interface SoapService extends Service { public function add(); } class SoapServiceImpl implements SoapService, Service { public function add(){ } } $ php interface.php Fatal error: Class SoapServiceImpl cannot implement previously implemented interface Service in /home/nishimura/interface.php on line 9
5.1ならできる。
$ php5.1 -v PHP 5.1.4-Debian-0.1~sarge1 (cli) (built: Jun 7 2006 23:25:19) (Debian GNU/Linux) Copyright (c) 1997-2006 The PHP Group Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies $ cat interface.php <?php interface Service{ } interface SoapService extends Service{ public function add(); } class SoapServiceImpl implements SoapService, Service{ public function add(){ echo "add\n"; } } $a = new SoapServiceImpl(); $a->add(); $ php5.1 interface.php add
というかJavaを使ってないからよく分からないんだけど、こういう状況って何故Serviceをimplementsする必要があるのか分からない。
ざっと検索したけどよくわからなかった。
interfaceの多重継承はどのようなところで使うのでしょうか?
http://java-house.jp/ml/archive/j-h-b/026491.html
セマンティクスとしては、複数の見方ができる一つの概念を新たに
定義したいということだと思いますが、具体的にはどのような使い方が
あるのでしょうか?複数の見方がしたいのであれば、複数のinterfaceを
implementsすればよいと思います。あるいは、最初に述べたinterface
の最初の役割において、よい使い方があるのでしょうか?(確かに
implementsにいくつもinterfaceを書く必要がないので、記述は楽になり
ますけど)
ここの最後の一文は
class SoapServiceImpl implements SoapService
と出来るから楽だよね、って言いたいんだよね。意味が違うな。