Php/docs/control-structures.declare

提供:Dev Guides
< Php
移動先:案内検索

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 も参照ください。