« 2007年01月 | トップページ | 2007年03月 »

・[2007年02月14日]使い所の難しいPHPの機能

2007年02月14日

使い所の難しいPHPの機能

PHPを始めて4年ほど経つのですが、4年間でほとんど使ったことのない機能が多数あります。それ以前に使い方を知らなくて雑誌などを見て「こんな使い方・機能があるのか?!」とビックリすることもあります。まあ、マニュアルを見ろって話ですね^^;
今日は使い所の難しいPHPの機能を紹介します。

PHPは他の言語と比べると、柔軟に出来ているので比較的簡単に習得できます。
特に型の定義が曖昧なので、予想外の動きをすることがあります。
下記の例を見てください。

$str = "0";
if($str) {
  echo "真です";
} else {
  echo "偽です";
}

「$str = "0";」は、文字列の「0」として定義してるのですが結果は「偽(false)」になります。
逆に「$str = "text";」や「$str = "3";」などを定義すると「真(true)」になります。
「$str」に値が入っていたら「真(true)」にしたいと思ってこのようなIF文を作ると正常に動きません。
この他にも以下のものは全て「偽(false)」になります。
$str = 0;
$str = "";
$str = null;
$str = array();

「if($str)」等は注意して使わないと後でバグの原因になります。

次は、以下のプログラムを見てください。

$num1 = 10;
$num2 = "10";
if($num1 == $num2) {
  echo "\$num1と\$num2は同じ値です"."<br>";
} else {
  echo "\$num1と\$num2は違う値です"."<br>";
}

これは「真(true)」になります。PHPの場合、型の定義が曖昧なのでTEXT型を数字として扱ってくれます。型まで分別してくれる方法もあります。
$num1 = 10;
$num2 = "10";
if($num1 === $num2) {
  echo "\$num1と\$num2は同じ値です"."<br>";
} else {
  echo "\$num1と\$num2は違う値です"."<br>";
}

「==」を「===」と書くと型まで判断してくれます。上記の例では「偽(false)」になります。

さあ、どんどん行きましょう。

$str = 10;
switch($str) {
case 20/10:
  echo "20/10"."<br>";
  break;
case 20/2:
  echo "20/2"."<br>";
  break;
}

これは見た目通りです。「switch~case」の「case」の部分に計算式を入れられます。

変数を定義する際に「$」を使いますが、「$$」とするとどうなるのでしょうか?

$test = "テストです";
$str1 = "test";
echo $$str1;

出力すると「テストです」と表示されます。
文字列を変数名として使いたい場合に使用するのでしょうが、実際に使ったことありません^^;

最後に繰り返し処理を制御する「break」「continue」の変わった使い方について紹介します。
まずは下記の例を見てください。

while(true) {
  while(true) {
    break 2;
  }
}

「break 2」と記述すると、ネストしてあるループを抜けられます。「continue 2」も同じようにネストしているループを飛ばします。

以上、使い所の難しいPHPの機能でした!
次回は、Selenium(セレニウム)やFirePHP等を実験的に使っているのでこれらの紹介しようと思います。

| | コメント (0) | トラックバック (0)