PHP入門 - 型

トップ > PHP入門 > 型

整数(int, integer)

PHPでは、下記の数値を利用することができます。

<?php
$num = 1234;        // 10進整数
$num = -1234;       // 負の値
$num = 01234;       // 8進整数 (0で始まる数値は8進数とみなされる)
$num = 0xffff;      // 16進整数 (0xで始まる数値は16進数とみなされる)
$num = 0b11000100;  // 2進整数 (0bで始まる数値は2進数とみなされる)(PHP 5.4.0以降)

浮動小数点数(float, double, real)

浮動少数点数は下記の様に記述します。

<?php
$num = 1.234;     // 浮動小数点数
$num = 1.2e3;     // 浮動小数点数(指数表記) 1.2 × 103
$num = 7E-10;     // 浮動小数点数(指数表記) 7 × 10-10

論理型(bool, boolean)

論理値は、真か偽を true または false で現します。大文字・小文字はどちらでも構いません。

<?php
$bool = true;
$bool = false;
$bool = TRUE;
$bool = True;

文字列(string)

文字列は、引用符、シングルクォート(')またはダブルクォート(")で囲みます。

<?php
$str = 'Hello';
$str = "Hello";

'...' の中では " を、"..." の中では ' を使うことができます。'...' の中で ' を、"..." の中で " を使用するには、バックスラッシュ(\)を用いて引用符をエスケープ(無効化)します。

<?php
$str = 'He said: "I\'ll be back."';
$str = "He said: \"I'll be back.\"";

"..." の中では、下記のエスケープシーケンスを使用できます。

\n : 改行(ラインフィード:LF:0x0A)
\r : 改行(キャリッジリターン:CR:0x0D)
\t : タブ(TAB:0x09)
\v : 垂直タブ(VT:0x0B) (PHP 5.2.5以降)
\e : エスケープコード(ESC:0x1B) (PHP 5.4.0以降)
\f : フォームフィード(FF:\x0C) (PHP 5.2.5以降)
\\ : バックスラッシュ(\)
\$ : ドル記号($)
\" : 二重引用符(")

\数値(0~8) は8進表記の文字コード、\x数値(0~f) は16進表記の文字コードを示します。下記の例では、いずれも文字A(0x41,0101)を表示します。

<?php
echo "A";
echo "\101";
echo "\x41";

"..." の中では、変数を展開することができます。下記の例では My name is Tanaka. と表示されます。

<?php
$name = "Tanaka.";
echo "My name is $name.\n";

複雑な変数を展開するには、変数を {...} で囲んでください。

<?php
echo "My name is {$name}.\n";
echo "My name is {$names[0]}.\n";
echo "My name is {$foo->name}.\n";

ヒアドキュメント(<<<)

ヒアドキュメント(<<<)の構文を用いて、複数行の文字列を現すことができます。下記の例では、This is ~ の3行が表示されます。最後のラベルは行頭をインデントせず、末尾にセミコロンを記述してください。

<?php
    echo <<<END_OF_TEXT
This is Japan.
This is America.
This is England.
END_OF_TEXT;

END_OF_TEXT の代わりに OWARI など任意のラベルを用いることができます。ヒアドキュメントの中では、シングルクォート(')、ダブルクォート(")、エスケープシーケンス、変数の展開を用いることができます。

<?php
    $name = "Tanaka";
    echo <<<OWARI
He said "I'll be back.".
My name is $name.
OWARI;

ラベルを '...' で囲んだ場合は、エスケープシーケンスや変数の展開を無効化することができます。これは、ヒアドキュメントと似ていますが、Nowdoc と呼ばれ、PHP 5.3.0 以降でサポートされます。

<?php
    echo <<<'EOT'
My name is $name.
EOT;

ラベルを "..." で囲んだ場合は、通常のヒアドキュメントと同じ動作をします。(PHP 5.3.0以降)

<?php
    echo <<<"EOT"
My name is $name.
EOT;

NULL型(null)

null は値が設定されていないことを示す特別な値です。大文字・小文字は区別されません。ただし、null値を持つ値と、未定義値は、is_null() などで判断する際の動作が多少異なります。(後述)

<?php
$var = null;

未定義値

一度設定された変数を、未定義値に戻すには unset() を用います。

<?php
$var = "AAA";                // 一度値が設定される
unset($var);        // $var の値が未定義状態になる

値が空であることを確認するには、isset(), is_null(), empty() などがあります。!isset() は、未定義値やNULL値の場合に真となります。is_null() も同様ですが、未定義値の場合に "PHP Notice: Undefined variable" の警告が発生します。empty() は数値の 0、文字列の "" や "0" などの場合も真になるので注意が必要です。下記の表で、○は真、×は偽を示します。

!isset($var)is_null($var)empty($var)
未定義値○(※1)
$var = null
$var = 0××
$var = ""××
$var = false××
$var = "0"××
$var = 1×××
$var = "ABC"×××

※1 "PHP Notice: Undefined variable" が発生

NAN(not a number)

数値でないことを示す特別な値 NAN があります。例えば acos(1.01) を計算すると NAN を返します。値が NAN か否かを調べるには == や === ではなく、is_nan() を用います。

<?php
$num = acos(1.01);                // NAN を返す
if (is_nan($num)) {
    echo "Not a number\n";
}

コールバック(callable)

callbale はコールバック関数を示す型です(PHP 5.4~)。以前の PHP のマニュアルには callback と記載されていました。

<?php
class MyClass {
    protected $callback = null;
    function set_callback(callable $callback) {
        $this->callback = $callback;
    }
    function call_callback() {
        call_user_func($this->callback);
    }
}

$obj = new MyClass();
$obj->set_callback(function test() { echo "TEST\n"; });
$obj->call_callback();

キャスト

PHPでは多くの場合、演算対象の値の型の組み合わせによって暗黙的な型変換が行われますが、式の前に (型名) を記述することで、明示的な型変換を行うことができます。これを、キャストと呼びます。

<?php
$a = 3.9;
$b = (integer)$a;            // 切り捨てされて整数の3に変換される
echo $b . "\n";              // 3 と表示される
echo gettype($b) . "\n";     // integer と表示される

キャストに指定可能な型には下記のものがあります。

(int)     - 整数
(integer) - (int)と同義
(bool)    - 真偽値
(boolean) - (bool)と同義
(float)   - 実数
(double)  - (float)と同義
(real)    - (float)と同義
(string)  - 文字列
(array)   - 配列
(object)  - オブジェクト
(unset)   - NULL値
(binary)  - バイナリ文字列(PHP5.2.1~)

Copyright(C) 2013 杜甫々
初版:2013年5月12日、最終更新:2013年5月12日
http://www.tohoho-web.com/php/types.html