(PHP 4, PHP 5, PHP 7, PHP 8)
declare
文は、あるコードブロックの中に 実行ディレクティブをセットするために使用します。declare
の文法は他の制御構造と似ています。
declare (ディレクティブ) 文
ディレクティブ
の箇所で、セットされた declare
ブロックの挙動を指定することが出来ます。 現在のところ、使用できるディレクティブは ticks
( ticksに関しては以下を参照ください)、 encoding
(encoding に関しては以下を参照ください)、 strict_types
(型宣言のページの 厳密な型付け も参照ください) です。
ディレクティブの処理は、ファイルをコンパイルする際に行われるので、 ディレクティブの値として渡せるのは、リテラルだけとなります。 変数や定数は、使えません。以下に例を示します。
<?php
// これは有効です
declare(ticks=1);
// これは無効です
const TICK_VALUE = 1;
declare(ticks=TICK_VALUE);
?>
declare
ブロックの 文
の実行のされ方や実行時にどのような作用が起こるかについては ディレクティブ
に何が指定されたかに依存します。
declare
文はグローバルスコープとしても使用され、 それはそれ以降のコード上の全てにおいて影響します (しかし、declare
を含むファイルがインクルードされた場合は、 親ファイルにはその影響は及びません)。
<?php
// 以下は同じ意味です
// こうすることもできますし、
declare(ticks=1) {
// ここにすべてのスクリプトを書きます
}
// こうすることもできます
declare(ticks=1);
// ここにすべてのスクリプトを書きます
?>
tickとはdeclare
ブロックの実行中にパーサが N個の低レベル tick 可能な文を実行するごとに 発生するイベントのことです。Nの値は declare
ブロックのディレクティブ
の箇所で ticks=N
のように 指定します。
すべての文が tick 可能なわけではありません。 たとえば条件式や引数式などは tick できません。
tickごとに発生させるイベントはregister_tick_function() を使用して指定します。詳細は以下の例を参照ください。1回のtickで 複数のイベントが起こり得ることに注意してください。
例1 Tick の使用例
<?php
declare(ticks=1);
// tick イベントごとにコールされる関数
function tick_handler()
{
echo "tick_handler() called\n";
}
register_tick_function('tick_handler'); // tick イベント発生
$a = 1; // tick イベント発生
if ($a > 0) {
$a += 2; // tick イベント発生
print $a; // tick イベント発生
}
?>
register_tick_function() および unregister_tick_function() も参照ください。
スクリプトのエンコーディングをスクリプトごとに指定するには encoding
ディレクティブを使用します。
例2 スクリプトのエンコーディングの宣言
<?php
declare(encoding='ISO-8859-1');
// ここにコードを書きます
?>
名前空間と組み合わせて使用する場合、使用できる形式は declare(encoding='...');
のみです。...
にエンコーディングを指定します。declare(encoding='...') {}
は、名前空間と組み合わせるとパースエラーとなります。
zend.script_encoding も参照ください。