トレイトについて その3

※この記事は読者によって投稿されたユーザー投稿のため、編集部の見解や意向と異なる場合があります。また、編集部はこの内容について正確性を保証できません。

ヒューマンリソシア株式会社はコラム「トレイトについて その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になるのでしょうか?

この続きは以下をご覧ください
http://resocia.jp/column/4824/

この記事が役に立ったらシェア!
みんなが読んでるWeb担メルマガで、あなたも最新情報をチェック
  • SEOやデジタルマーケの最新情報をゲット
  • 事例やインタビューも見逃さない
  • 要チェックのセミナー情報も届く
みんなが読んでるWeb担メルマガで、あなたも最新情報をチェック
  • SEOやデジタルマーケの最新情報をゲット
  • 事例やインタビューも見逃さない
  • 要チェックのセミナー情報も届く

Web業界の転職情報

もっと見る
Sponsored by

今日の用語

被リンク
自分のサイトにリンクを張ってもらうこと、または張ってもらったリンクのこと。 ...→用語集へ

連載/特集コーナーから探す

インフォメーション

Web担のメルマガを購読しませんか?
Web担の記事がコンパクトに毎週届くメールマガジン「Web担ウィークリー」は、10万人が読んでいる人気メルマガ。忙しいあなたの情報収集力をアップさせる強い味方で、お得な情報もいち早く入手できます。

Web担に広告を掲載しませんか?
購読者数10万人のメールマガジン広告をはじめとする広告サービスで、御社の認知向上やセミナー集客を強力にお手伝いいたします。

サイトマップ
RSSフィード


Web担を応援して支えてくださっている企業さま [各サービス/製品の紹介はこちらから]