【2019年07月21日】

PHPはあまり型を意識せずにプログラミングが出来る。
これを、PHPには「型がない」と表現されることがある。
しかしこれは間違っている。

PHPにも明確に型が存在する。
意識しなくてもいいのは、内部で暗黙的に型変換を行ってくれているからである。

例えば文字列の"1"と数値の1。

<?php

$str = '1';
$int = 1;

var_dump($str);
var_dump($int);

?>
string(1) "1"
int(1)

普段何気なく使っている関数、var_dump。
変数の詳細を出力してくれる。

見れば一目瞭然。はっきりと型が示されている。


こんなことをやってみる。

<?php

$str = '1';
$int = 1;

$answer1 = $str + $int;
$answer2 = $str . $int;

var_dump($answer1);
var_dump($answer2);

?>
int(2)
string(2) "11"

文字列と数値の変数を、強引に計算する。

「+」は算術的に足し算を行う。
「.」はPHPでは文字列結合を行う。

結果、前者では文字列の"1"が数値に変換された後、足し算が行われているのがわかる。
後者では数値の1が文字列に変換され、文字列結合が行われている。

このようにPHPでは型が内部で勝手に変換されるため、型を意識する必要がないのである。

それでは次の例はどうなるか。
数値に変換できない文字を含む文字列で足し算してみる。

<?php

$int = 1;
$str = '02あいうえお';

$answer = $str + $int;
var_dump($answer);

?>
int(3)

知らない人が見たら、「え??」ってなりそうな結果である。
なんと強引にも'02あいうえお'が数値の2に変換されている。

PHPはどんな文字列でも、一番近い数値に変換する。
この例では数値に変換できない文字は全て切り捨てているというわけだ。

これを理解していないと、思わぬバグにつながる可能性があるので気をつけてほしい。