12,964
回編集
(→概要) |
|||
57行目: | 57行目: | ||
== 変数のデータ型 == | == 変数のデータ型 == | ||
==== データ型の概要 ==== | |||
数値や文字列等の値にはデータ型が存在するが、PHPの変数はどのデータ型でも同じように格納することができる。<br> | 数値や文字列等の値にはデータ型が存在するが、PHPの変数はどのデータ型でも同じように格納することができる。<br> | ||
そのため、変数の型を宣言する必要はない。<br> | そのため、変数の型を宣言する必要はない。<br> | ||
81行目: | 82行目: | ||
$var = 180; | $var = 180; | ||
print '[値]'.$var.','; | print '[値]'.$var.','; | ||
print '[型]'.gettype($var) | print '[型]'.gettype($var).'<br />'; | ||
?> | ?> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | |||
==== 整数 ==== | |||
===== 最大値 / 最小値 ===== | |||
最大値および最小値は、AMD64またはx86環境により依存することに注意する。<br> | |||
<br> | |||
PHPでは、オーバーフローまたはアンダーフローを引き起こしてもプログラムはエラーにならない。<br> | |||
特に、ユーザが⼊⼒した数値においては、必ず範囲内に収まっているかどうかを⼊⼒時にチェックする必要がある。<br> | |||
<syntaxhighlight lang="php"> | |||
// 整数の最⼤値 | |||
$intmax = PHP_INT_MAX; | |||
var_dump($max); | |||
// 整数の最⼩値 | |||
$intmin = PHP_INT_MIN; // PHP 7.0以降使用可能 | |||
var_dump($min); | |||
</syntaxhighlight> | |||
<br> | |||
===== 累乗 ===== | |||
<syntaxhighlight lang="php"> | |||
// PHP 5.5以前は、pow関数を使用する必要がある | |||
var_dump(pow(2, 3)); | |||
// PHP 5.6以降は、**演算⼦および^演算子が使用できる | |||
var_dump(2 ** 3); | |||
var_dump(2 ^ 3); | |||
// 数値でない値を累乗計算する場合は、警告が発⽣する | |||
var_dump('a' ** 3); | |||
</syntaxhighlight> | |||
<br> | |||
===== 2進数 8進数 16進数 ===== | |||
以下に示すようなものに利⽤されている。<br> | |||
* 16進数の例 : HTMLのカラーコード | |||
* 8進数の例 : Linuxにおけるファイルのパーミッション | |||
<br> | |||
<syntaxhighlight lang="php"> | |||
$a = 0b111; // 2進数 : 先頭に0bを付加する | |||
var_dump($a); // int(7) | |||
$b = 012; // 8進数 : 先頭に0を付加する | |||
var_dump($b); // int(10) | |||
$c = 0x1A; // 16進数 : 先頭に0xを付加する | |||
var_dump($c); // int(26) | |||
</syntaxhighlight> | |||
<br> | |||
==== 浮動⼩数点数 ==== | |||
浮動⼩数点数は、⼩数を含めた数を表現できる型である。<br> | |||
浮動小数点数(float型)のサイズは、AMD64またはx86により依存する。<br> | |||
一般的に、10進数で14桁の精度があり、<u>AMD64での最大値は約1.8e308</u> (IEEE 854) となる。<br> | |||
<br> | |||
<syntaxhighlight lang="php"> | |||
$number = 3.14; // 値 : 3.14 | |||
echo $number. PHP_EOL; | |||
$number = 3.14e5; // 値 : 314000 | |||
echo $number. PHP_EOL; | |||
$number = 1_234.567; // PHP 7.4以降は、_(アンダーバー)が使用できる | |||
if (is_float($number)) print "number is float" . PHP_EOL; | |||
else if (is_double($number)) print "number is double" . PHP_EOL; | |||
</syntaxhighlight> | |||
<br> | |||
==== NaN ==== | |||
数値演算の結果が定数NaNで表される値になることがある。<br> | |||
この定数は、浮動小数点演算における未定義の値あるいは表現不能な値を表す。<br> | |||
<br> | |||
この値を他の値と比較すると、緩やかな比較および厳密な比較のいずれでも結果は<code>false</code>となる。<br> | |||
<br> | |||
NaNは様々な値の数を表すものであり、NaNを他の値と比較してはならない。<br> | |||
NaNの確認を行う場合は、<code>is_nan</code>関数を使用する。<br> | |||
<br> | |||
==== 文字列 ==== | |||
===== 文字列の概要 ===== | |||
Webプログラミングでは、⽂字列を頻繁に使用する。<br> | |||
ユーザ名、メールアドレス、住所等、対象とする⽂字列は様々である。<br> | |||
<br> | |||
PHPでは、AMD64環境では⽂字数の⻑さに制限がない。<br> | |||
x86環境では、⽂字列の最⼤⻑は2[GB]が上限となる。<br> | |||
<br> | |||
ただし、⻑い⽂字列を⽣成するとメモリが不⾜してメモリーオーバーを引き起こし、プログラムは異常終了することに注意する。<br> | |||
<br> | |||
===== 全⾓文字 ===== | |||
⽇本語を1⽂字として判定したい場合は、<code>mb_strlen</code>関数を使⽤する。<br> | |||
その他にも、マルチバイトを考慮して⽂字列を判定する関数が存在する。<br> | |||
<syntaxhighlight lang="php"> | |||
// マルチバイト文字を考慮した⽂字数 | |||
$a = 'あいうえお' | |||
echo mb_strlen($a). PHP_EOL; // 出力 : 5 | |||
</syntaxhighlight> | |||
<br> | |||
===== 半⾓文字と全⾓文字の組み合わせ ===== | |||
<code>mb_convert_kana</code>関数による⽂字列の変換は、⽇本語を扱う上で重要である。<br> | |||
// ⽇本語⽂字列の変換 | |||
// (変換前)全⾓の1(全⾓スペース)あ(全⾓スペース)半⾓のイ | |||
$c = "1 あ イ"; | |||
// (変換後)半⾓の1(半⾓スペース)あ(半⾓スペース)全⾓のイ | |||
$d = mb_convert_kana($c, Kas); | |||
echo $c. PHP_EOL; // 1 あ イ | |||
echo $d. PHP_EOL; // 1 あ イ | |||
</syntaxhighlight> | |||
<br> | |||
以下の例では、次に示す変換をしている。<br> | |||
* K | |||
*: 半⾓カタカナを全⾓カタカナに変換する。 | |||
* a | |||
*: 全⾓英数字を半⾓英数字に変換する。 | |||
* s | |||
*: 全⾓スペースを半⾓スペースに変換する。 | |||
<br> | |||
これにより、半⾓文字と全⾓文字を統⼀する。<br> | |||
全⾓文字と半⾓文字が混ざる場合、正常に⽂字列の検索ができない状況が起きる。<br> | |||
また、カタカナを全⾓文字として統⼀することができるといった理由もある。<br> | |||
<br> | |||
例えば、Webページ上において、数値は半⾓で⼊⼒すると指定したとしても、全⾓文字として⼊⼒するユーザは多い。<br> | |||
そのため、全⾓文字と半⾓文字を統⼀することが重要である。<br> | |||
<br> | |||
Webで使用されている文字コードを、以下に示す。<br> | |||
* UTF-8 | |||
*: ほとんどのWebページで使用されている。 | |||
* ISO-2022-JP | |||
*: 過去には、電⼦メールで使用されることが多かった。 (現在では、ほとんどがUTF-8である) | |||
* SHIFT-JIS (SJIS) | |||
*: 主に、フィーチャーフォン(ガラケー)向けのモバイルサイトで使用されている。 | |||
<br><br> | <br><br> | ||