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クラスのスタティックメソッド