PHPのdeclare文(宣言ステートメント)とは?使い方をわかりやすく解説
はじめに
PHPのdeclare文は、whileやfor、foreachなどの他のフロー制御構造とよく似た構文を持っています。
基本構文
declare (directive)
{
statement1;
statement2;
...
}
ブロックの動作は、指定するディレクティブの種類によって決まります。declare文で指定できるディレクティブは、ticks、encoding、strict_typesの3種類です。
ticksディレクティブ
「tick」とは、スクリプト内で一定数のステートメントが実行されるたびに発生する特殊なイベントのことです。ここでいうステートメントはPHP内部のものを指し、おおよそスクリプト内のステートメント(条件式や引数式は除く)に相当します。任意の関数はregister_tick_function()を使ってtickイベントに関連付けることができ、declareディレクティブで指定したtick数に達するごとに、登録された関数が実行されます。
次の例では、declareブロック内のループが5回完了するたびにmyfunction()が実行されます。
例
<?php
function myfunction(){
echo "Hello World\n";
}
register_tick_function("myfunction");
declare (ticks=5){
for ($i=1; $i<=10; $i++){
echo $i."\n";
}
}
?>
出力
上記のスクリプトをコマンドラインから実行すると、次の結果が出力されます。
1 2 3 4 5 Hello World 6 7 8 9 10 Hello World
なお、PHPには関数とtickイベントの関連付けを解除するためのunregister_tick_function()も用意されています。
strict_typesディレクティブ
PHPは弱い型付けの言語であるため、ある操作を実行する際にデータ型を適切な型へ自動的に変換しようとします。例えば、2つの整数引数を受け取ってその合計を返す関数がある場合、呼び出し時の引数にfloatを渡しても、PHPパーサーは自動的にfloatを整数へ変換します。このような型の強制変換(型強制)を望まない場合は、declare構造でstrict_types=1を指定します。
例
<?php
//strict_typesはデフォルトで0
function myfunction(int $x, int $y){
return $x+$y;
}
echo "total=" . myfunction(1.99, 2.99);
?>
加算を実行する際にfloatの引数は整数へ強制的に変換されるため、次のような結果になります。
出力
total=3
しかし、declare構造でstrict_types=1を指定すると、型の強制変換が防止されます。
例
<?php
declare (strict_types=1);
function myfunction(int $x, int $y){
return $x+$y;
}
echo "total=" . myfunction(1.99, 2.99);
?>
出力
この場合、次のようなエラーが発生します。
Fatal error: Uncaught TypeError: Argument 1 passed to myfunction() must be of the type integer, float given, called in line 7 and defined in C:\xampp\php\testscript.php:3
encodingディレクティブ
declare構造にはencodingディレクティブもあり、これを使うことでスクリプトの文字エンコーディング方式を指定できます。
例
<?php declare(encoding='ISO-8859-1'); echo "This Script uses ISO-8859-1 encoding scheme"; ?>
-
HTMLをPHPの「if」文の中に埋め込む方法をわかりやすく解説
はい、PHPを使えばHTMLを「if」文の中に埋め込むことができます。条件分岐の結果に応じて異なるHTMLを出力したい場面は非常に多く、そのためにいくつかの書き方が用意されています。ここでは代表的な3つの方法を紹介します。 方法1:代替構文(if〜endif)を使う PHPには、コロン「:」と「endif;」を組み合わせた代替構文があります。波括弧「{}」を使わないため、PHPとHTMLが混在するテンプレートでは特に読みやすくなります。 <?php if($condition) : ?> <a href="http
-
PHPでグローバル変数を宣言する方法をわかりやすく解説
グローバル変数とはグローバル変数とは、プログラム内のどこからでもアクセスできる変数のことです。しかし、PHPでは関数の中からグローバル変数を変更したい場合、その関数内で明示的に「これはグローバル変数である」と宣言しなければなりません。この宣言は、変数の前に global キーワードを置くだけで簡単に行えます。例1:globalキーワードで変数を書き換える以下のコードでは、PHPでグローバル変数を宣言し、関数内から値を変更する方法を確認できます。<?php $val = 1; function di