Home > PHP > Java風なメソッド呼び出し

Java風なメソッド呼び出し

  • 2006-12-21 (木) 23:15
  • PHP
  • このエントリーをはてなブックマークに追加
この記事の所要時間: 244

via MikeNaberezny.com » Fluent Interfaces in PHP

PHP5で採用された記述方法です。そう言えばすっかり忘れていました。

PHP:
  1. $obj->foo()->bar();

ってやつです。

使えるシーンは色々あると思いますが、同じデータに繰り返し操作を行う文字列の変換を例に書いてみました。

PHP:
  1. <?php
  2. $str = ' Hello world!! ';
  3. echo str_replace('ELL', '123', strtoupper(trim($str))) . PHP_EOL;
  4. ?>

というのを

PHP:
  1. <?php
  2. // 独自文字列クラス
  3. class StringClass {
  4.   private $str = "";
  5.  
  6.   public function __construct($str) {
  7.     $this->str = $str;
  8.   }
  9.  
  10.   public function toUpper() {
  11.     $this->str = strtoupper($this->str);
  12.     return $this;
  13.   }
  14.  
  15.   public function toLower() {
  16.     $this->str = strtolower($this->str);
  17.     return $this;
  18.   }
  19.  
  20.  
  21.   public function strTrim() {
  22.     $this->str = trim($this->str);
  23.     return $this;
  24.   }
  25.  
  26.   public function strReplace($search, $replace) {
  27.     $this->str = str_replace($search, $replace, $this->str);
  28.     return $this;
  29.   }
  30.  
  31.   public function toString() {
  32.     echo $this->str . PHP_EOL;
  33.   }
  34. }
  35.  
  36. $obj = new StringClass(" Hello world!! ");
  37. $obj->strTrim()
  38.     ->toUpper()
  39.     ->strReplace('ELL', '123')
  40.     ->toString();
  41.  
  42. ?>

のように書けます。(文字列クラスが標準であれば良いのですが。。。)

ポイントは単にメソッドで$thisを返すだけです。

可読性も良いですし、メソッドの呼び出し順を入れ替えるのも容易です。美しいですしね;-)

ちなみに配列関数のように参照を返す関数でも同じような記述ができます。

PHP:
  1. <?php
  2. $array = array(new DateTime('2006/12/21'));
  3. echo current($array)->format('Y/m/d') . PHP_EOL;
  4. ?>

トラックバック:0

このエントリーのトラックバックURL
http://www.1x1.jp/blog/2006/12/php5_method.html/trackback
Listed below are links to weblogs that reference
Java風なメソッド呼び出し from Shin x blog

Home > PHP > Java風なメソッド呼び出し

検索
フィード
メタ情報

Return to page top