トレイトについて その3

Human Resocia Co.,Ltd.

2015-11-16 09:00

ヒューマンリソシア株式会社はコラム「トレイトについて その3」を公開しました。
###

タイトル的には「traitのお話」ではあるのですが。
その源流になるあたりの理屈を、今回は追いかけてみましょう。

まず「継承」を主眼に考えてみます。
PHPにも存在しているのが「単一継承」で、これは例えば、以下のようなコードで実際に書く事ができます。


// クラス定義
class hoge {
}
// hogeを継承したfooクラスの定義
class foo extends hoge {
}

「単一」があるので、勿論「多重継承」という概念も、世間様的には存在します。
ただ、じゃぁPHPでこんな風に書けるか、というと…


class hoge {
}
class foo{
}
// hogeとfooを継承してみる
class bar extends hoge, foo {
}

これは駄目なんですね。PHPでは、多重継承は文法レベルで「明示的に禁止」されています。
ちなみに多重継承が可能な言語ですが、おいちゃんが使っている範囲ではC++。
あとは、Pythonが可能なようであります。

一方で。例えばJavaが「多重継承はできない」言語、になっています。
PHPはこの「多重継承はできない」ほうのカテゴリーに属します。

さて。なんで「出来ない」言語があるんだろう? っていうお話になるんですが、
まぁ端的には「割と問題が起きやすいから」ってところになります。
具体的にその「問題」を、少し、眺めてみましょう。

一つには「名前の衝突」の問題があります。
PHPが多重継承できると仮定して、こんなコードを書いてみましょう。


class hoge {
public function test() {}
}
class foo {
public function test() {}
}
//
class bar extends hoge, foo {
public function test() {
parent::test();
}
}

クラスbarのtestメソッドの中で「親のtestメソッドを呼ぶ」ために、parent::を使いました。
…さて、この場合のparentは、hogeになるのでしょうか? fooになるのでしょうか?

この続きは以下をご覧ください
(リンク »)
本プレスリリースは発表元企業よりご投稿いただいた情報を掲載しております。
お問い合わせにつきましては発表元企業までお願いいたします。

【企業の皆様へ】企業情報を掲載・登録するには?

御社の企業情報・プレスリリース・イベント情報・製品情報などを登録するには、企業情報センターサービスへのお申し込みをいただく必要がございます。詳しくは以下のページをご覧ください。

ZDNET Japan クイックポール

注目している大規模言語モデル(LLM)を教えてください

NEWSLETTERS

エンタープライズ・コンピューティングの最前線を配信

ZDNET Japanは、CIOとITマネージャーを対象に、ビジネス課題の解決とITを活用した新たな価値創造を支援します。
ITビジネス全般については、CNET Japanをご覧ください。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]