Nowdocは変数を展開してしまわないヒアドキュメント(PHP5.3以降)
Posted: Updated:
ヒアドキュメントは変数を展開して評価してしまう
クラスをデータベースから自動生成するためのスクリプトを記述する際に、クラスのテンプレートになる文字列を変数に保持したかったのです。
あいにくヒアドキュメントだとダブルクオーテーション囲いと同じく、変数を展開して評価されてしまうのでアウト。
こんな感じで怒られてしまう。
function getClassTemplate()
{
return <<< DOC_END
<?php
class %{CLASS_NAME} extends Abstract
{
protected
$_my_class_name = __CLASS__,
$_table_name = '%{TABLE_NAME}',
$_primary_key = '%{PRIMARY_KEY}',
$_defined_field = array(%{DEFINED_FIELD}
),
$_validate_rule = array(%{VALIDATE_RULE}
);
}
DOC_END;
}
// 変数が展開された結果、undefinedなエラー
$template = getClassTemplate();
/*
Notice: Undefined variable: _my_class_name in /script.php on line 129
Notice: Undefined variable: _table_name in /script.php on line 130
Notice: Undefined variable: _primary_key in /script.php on line 131
Notice: Undefined variable: _defined_field in /script.php on line 133
Notice: Undefined variable: _validate_rule in /script.php on line 135
*/
Nowdocなら変数を展開しないので安心
PHP5.3からはヒアドキュメントに似た記法で、終端識別子をシングルクオートで囲うことで、Nowdocを利用できます。また、変数などの展開がないためconstに指定することもできます。
function getClassTemplate() { return <<< 'DOC_END'なるほどねー。
参考サイト