何も言いません、これ見て驚いたらいいですよ。PHP5.4.0 Aplpha3 で実際に実行できたプログラムです。もう大興奮ですよ。 Pythonだともっといろいろ書けるよ、とか、Rubyはmixin最初からあるよとか、その変数スコープJSだと当たり前すぎるとか、そういうツッコミはノーサンキューで、PHPでこれが動くということが重要なんですってば。
PHP5.4にはトレイトという文法が導入されて、多重継承の便利さが享受できるようになるそうです。 いろいろ試してみることにしました。 トレイトといえば代表選手はScalaですね。Scalaでいうトレイトは、インターフェースの定義とメソッドの実装を同時にやってくれる便利な概念でした。単一継承のOOP言語では「〜は〜の一種」という制約が強すぎて、「ペンギンは鳥の飛行メソッドによって飛行できてしまう」という問題があります。でもちゃんと「ペンギンは飛べないが泳げる鳥」を綺麗に解決する必要はあって、その解答として、トレイトのあるScalaではこんな解が導けます。 abstract class Animal abstract class Bird extends Animal { def hasBeak = true // 鳥にはかならずクチバシがある def hasWings = true // 翼
PHP5.4 alpha1がリリースされた。このリリースでは、PHPのオブジェクト指向言語の新たな機能としてtraitと呼ばれる機能が追加された。PHP5.4におけるtraitとは、型に影響を与えずにクラスに適用できるメソッドとプロパティの集合である。 早速PHP5.4 alpha1をインストールし、traitを使ってシングルトンパターンを実装した。このコードでは、クラスの継承関係に影響を与えずにシングルトンパターンをモジュール化している。 <?php trait Singleton { protected function __construct() { } static function getInstance() { static $obj = null; return $obj ?: $obj = new static; } function __clone() { throw n
何かの処理を共通化するために抽象クラス書いて継承させるというのはよくやるやり方だけど、抽象クラスを継承させるのはtraitに比べて制限が大きい。というのも、クラスはひとつしか継承できないが、traitは何個でもクラスに適用できるからで、わざわざ制限の大きいほうを選ぶ理由が無ければtrait使えばいいよという話。これはクラスを継承させるよりもインターフェイス使ったほうがいいよーと言われる話と似ている。これもインターフェイスはクラスの継承と違っていくつもクラスに適用できるため。 PHP5.4から導入される予定のtraitってなんぞという人は、PHP5.4のtraitを使ったシングルトンパターン実装によるtrait入門 - id:anatooのブログを参照する。 どうしても抽象クラスを作って継承させたいという場合も、まずインターフェイスを定義してその抽象クラスがそのインターフェイスを実装したほう
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く