5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPのヒアドキュメントでクラスのスタティックメソッドを展開する方法

Posted at

PHPのヒアドキュメントの中で、クラスのスタティックメソッドの戻り値を使いたくて調べた結果です。
PHPバージョン5.5で確認しました。

どうやらヒアドキュメントの中では、クラスを直接呼び出すことはできないようです。
代わりにクラス名を代入した変数を定義して、その変数を展開してクラスのメソッドを呼び出す必要があるようです。
この時さらに**{}**で囲ってあげる必要もあります。

ほかにも変数、定数、配列、連想配列なども試してみました。
定数もそのままでは展開できず、引数を返すだけの関数を用意してあげ、その関数を経由させる方法があるようです。

PHP
<?php
// PHP Version 5.5.38

$v = '変数の値';
define('CONSTANT', '定数の値');
$a = ['値1', '値2'];
$h = ['key1' => 'key1の値', 'key2' => 'key2の値'];  

class Sample {
    public $property = 'プロパティ';
    static $static_property = 'スタティックプロパティ';

    const CONSTANT = '定数';

    function method () {
        return 'メソッド';
    }

    static function static_method () {
        return 'スタティックメソッド';
    }
}

$object = new Sample;
$class_name = 'Sample'; // クラス名を代入した変数

// 定数展開用の関数
$cst = 'cst';           // 関数名も変数に代入する
function cst($constant){
    return $constant;
}


// ヒアドキュメントでの使用例
echo <<< EOF
    <p>ふつうの文字</p>

    <p>$v</p>
    <p>{$cst(CONSTANT)}</p>

    <p>配列の$a[0]$a[1]</p>
    <p>連想配列の{$h['key1']}{$h['key2']}</p>

    <p>Sampleオブジェクトの$object->property</p>
    <p>Sampleオブジェクトの{$object->method()}</p>

    <p>Sampleクラスの{$class_name::$static_property}</p>
    <p>Sampleクラスの{$cst($class_name::CONSTANT)}</p>
    <p>Sampleクラスの{$class_name::static_method()}</p>
EOF

?>
出力結果
ふつうの文字

変数の値

定数の値

配列の値1と値2

連想配列のkey1の値とkey2の値

Sampleオブジェクトのプロパティ

Sampleオブジェクトのメソッド

Sampleクラスのスタティックプロパティ

Sampleクラスの定数

Sampleクラスのスタティックメソッド
5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?