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