PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPのdeclare文(宣言ステートメント)とは?使い方をわかりやすく解説


はじめに

PHPのdeclare文は、whileやfor、foreachなどの他のフロー制御構造とよく似た構文を持っています。

基本構文

declare (directive)
{
   statement1;
   statement2;
   ...
}

ブロックの動作は、指定するディレクティブの種類によって決まります。declare文で指定できるディレクティブは、ticksencodingstrict_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";
?>
  1. HTMLをPHPの「if」文の中に埋め込む方法をわかりやすく解説

    はい、PHPを使えばHTMLを「if」文の中に埋め込むことができます。条件分岐の結果に応じて異なるHTMLを出力したい場面は非常に多く、そのためにいくつかの書き方が用意されています。ここでは代表的な3つの方法を紹介します。 方法1:代替構文(if〜endif)を使う PHPには、コロン「:」と「endif;」を組み合わせた代替構文があります。波括弧「{}」を使わないため、PHPとHTMLが混在するテンプレートでは特に読みやすくなります。 <?php if($condition) : ?>     <a href="http

  2. PHPでグローバル変数を宣言する方法をわかりやすく解説

    グローバル変数とはグローバル変数とは、プログラム内のどこからでもアクセスできる変数のことです。しかし、PHPでは関数の中からグローバル変数を変更したい場合、その関数内で明示的に「これはグローバル変数である」と宣言しなければなりません。この宣言は、変数の前に global キーワードを置くだけで簡単に行えます。例1:globalキーワードで変数を書き換える以下のコードでは、PHPでグローバル変数を宣言し、関数内から値を変更する方法を確認できます。<?php    $val = 1;    function di