declare 命令は、あるコードブロックの中に 実効命令をセットするために使用されます。declare の文法は他の制御構造と似ています。
declare (命令) 文
命令の箇所で、セットされた declareブロックの挙動を指定することが出来ます。 現在のところ、使用できる命令は ticks ( ticksに関しては以下を参照してください) と encoding (encoding に関しては以下を参照ください) です。
注意: encoding ディレクティブは PHP 5.3.0 で追加されました。
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');
$a = 1;
if ($a > 0) {
$a += 2;
print($a);
}
?>
例2 Ticks の使用例
<?php
function 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 ディレクティブを使用します。
例3 スクリプトのエンコーディングの宣言
<?php
declare(encoding='ISO-8859-1');
// ここにコードを書きます
?>
名前空間と組み合わせて使用する場合、使用できる形式は declare(encoding='...'); のみです。... にエンコーディングを指定します。declare(encoding='...') {} は、名前空間と組み合わせるとパースエラーとなります。
php を --enable-zend-multibyte つきでコンパイルしていない場合、 PHP 5.3 では encoding 宣言は無視されます。
PHP が --enable-zend-multibyte つきでコンパイルされているかどうかを知る方法は phpinfo() 以外に存在しないことに注意しましょう。