忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

PHP クラスの中の「return $this」について


今回はクラスの中の return $this について説明したいと思います。 自分を返すって何?って思うかもしれませんが、この方法はいろんなところで使われています。

百聞は一見にしかず、以下のサンプルソースを見て下さい。 名前クラスとして foo を宣言しています。内容的にはファーストネーム、ラストネームを別々の関数で設定し、フルネームを取得する関数があります。

ファーストネーム、ラストネームの設定する関数の戻り値として $this を返します。これは自分自身のクラスのインスタンスを示します。 (インスタンスはクラスの実体の参照のことです。)

この参照を連続的に使用しているのが40行目のファーストネーム、ラストネームの設定の部分です。 -> でつないで、ファーストネーム設定の戻りのインスタンスを使用して更にラストネーム設定を行っています。

return $this の例のクラス

<?php
//  名前クラス
class foo {
    private $firstName;     // ファーストネーム
    private $lastName;      // ラストネーム

    //  ファーストネーム設定
    public function setFirstName($value = '')
    {
        $this->firstName = $value;
        return $this;       // 自分自身のインスタンスを返す
    }

    //  ラストネーム設定
    public function setLastName($value = '')
    {
        $this->lastName = $value;
        return $this;       // 自分自身のインスタンスを返す
    }

    //  フルネーム取得(日本式)
    public function getFullName()
    {
        return $this->lastName.' '.$this->firstName;
    }

    public function getFirstName()
    {
        return $this->firstName;
    }

    public function getLastName()
    {
        return $this->lastName;
    }
}

// foo オブジェクト作成
$objFoo = new foo();

// 「山田 太郎」の名前設定
$objFoo->setFirstName('太郎')->setLastName('山田');

// 名前全体を取得
echo "名前全体:".$objFoo->getFullName();
?>

これを実行するとブラウザに「名前全体:山田 太郎」のみが表示されます。




クラスの中で return $this をするのはクラスへの値設定がほとんどだと思います。

このサイトの記事で PHPExcel を紹介していますが、その中で以下の様なテスト処理を行いますが、 -> でつないで処理しているところがあります。

各種の設定を1行で一気に書けて便利ですが、やり過ぎは禁物かと思います。 その時はオブジェクトを少しずつ分けて処理すると見やすくはなります。

PHPExcel の使用例

<?php
// ライブラリ読込
require_once './PHPExcel-1.8/Classes/PHPExcel.php';
// PHPExcelオブジェクト作成
$objBook = new PHPExcel();
// ワークシートオブジェクト
$objSheet = $objBook->getActiveSheet();

// スタイルオブジェクト取得([B2]セル)
$objStyle = $objSheet->getStyle('B2');
// フォアグランド(前景)色を「白色」に設定
$objStyle->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
// 水平アライメントを「右寄せ」に設定
$objStyle->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
// ボーダーオブジェクト取得([B2]セル)
$objBorders = $objStyle->getBorders();
// ボーダー全て(Top, Bottom, Left, Right)を「細い線:BORDER_THICK」に設定
$objBorders->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK);
$objBorders->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK);
$objBorders->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK);
$objBorders->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK);

// フィルオブジェクト取得([B2]セル)
$objFill = $objStyle->getFill();
// 背景のタイプを「塗つぶし」に設定
$objFill->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
// 背景色を「赤」に設定
$objFill->getStartColor()->setARGB('FFFF0000');

// [B2]セルに文字列設定
$objSheet->setCellValue('B2', 'ABCDEF');

// [test6-1.xlsx]:Excel2007形式で保存する
$objWriter = PHPExcel_IOFactory::createWriter($objBook, "Excel2007");
$objWriter->save('test6-1.xlsx');
exit();
?>











PR

コメント

コメントを書く