裏メニュー第二週 †データ型 †PHPのデータ型について解説します。 データ型 †PHPが扱うデータには型が指定されています。 PHPのデータ型には次のようなものがあります*1。
ここでは扱いませんが、この他にもリソース型、NULL型が存在します。 データ型の確認 †変数の型を確認するためにはgettype関数*3を使います。 <?php $a = 1; $b = 1.0; $c = NULL; $d = new stdClass; $e = 'foo'; echo gettype($a); // => "integer" echo gettype($b); // => "double" echo gettype($c); // => "NULL" echo gettype($d); // => "object" echo gettype($e); // => "string" ?> データ型と比較演算 †PHPの比較演算子には、型情報も含めて値を比較するものと型情報を無視して値を比較するものがあります。 PHPの比較演算子には次のようなものがあります(PHPマニュアルより引用)。
曖昧な比較のために意図せぬ振舞いをするコードを例示します。 <?php $sample = '2人で行ったあの映画館。今は違う建物。寂しい。'; if (2 == $sample) { echo "true\n"; // こちらを通る } else { echo "false\n"; } ?> 比較演算子を == から === に変更して振舞いを検証します。 <?php $sample = '2人で行ったあの映画館。今は違う建物。寂しい。'; if (2 === $sample) { echo "true\n"; } else { echo "false\n"; // こちらを通る } ?> こちらの方が直感と一致する振舞いであると言えるでしょう。 データ型の変換 †ある変数の型を変更することを「(型)キャストする」と表現します。 <?php $a = 1; $b = 1.0; if ($a === $b) { echo "\$a と \$b は等しい\n"; } else { echo "\$a と \$b は等しくない\n"; // こちらを通る } $b = (integer)$b; // integer型にキャスト if ($a === $b) { echo "\$a と \$b は等しい\n"; // こちらを通る } else { echo "\$a と \$b は等しくない\n"; } ?> 宿題 †全ての整数は実数でもあります(包含関係)。このことを踏まえて次の問いかけに答えてください。
比較演算では == の代りに === が、 != の代りに !== が使用されるべきです。このことを踏まえて次の問いかけに答えてください。
次のプログラムが含む潜在的不具合を指摘してください。 <?php // body_measurement テーブルから各人の「名前」「身長」「体重」を取得し、 // それらの情報と計算したBMIを出力するプログラムです。 // // body_measurement テーブルの定義は次の通りです。 // -- // CREATE TABLE `body_measurement` ( // `id` int(11) NOT NULL auto_increment, // `name` varchar(255) NOT NULL, // `height` double default NULL, // `weight` double default NULL, // PRIMARY KEY (`id`) // ) ENGINE=MyISAM DEFAULT CHARSET=utf8 $db_handle = new PDO('mysql:host=localhost;dbname=test', 'y_mahata', 'password'); $query = 'SELECT * FROM body_measurement'; $st_handle = $db_handle->prepare($query); $st_handle->execute(); while ($row = $st_handle->fetch(PDO::FETCH_ASSOC)) { $name = intval($row['name']); $height = intval($row['height']); $weight = intval($row['weight']); $bmi = $weight / (($height / 100) * ($height / 100)); echo "{$name}, {$height}, {$weight}, {$bmi}\n"; } ?> 参考資料 † |