Service(業務内容)

Technology::PHP Tips 2

IF文でのチェック (0と値無しを見分けるにはどうするか?)

(他の多くの言語と同様に)PHPではFALSEと0(ゼロ)はほぼ同等の意味を持ちます。が、0という値と、値無し(例えば"")を見分けるのが難しくなります。

本家PHPサイト(www.php.net)の「empty」関数のコメントに良い関数が紹介されていました。これを使えば、うまく見分けることが可能です。

 

function def( $var ) {
  if( is_array( $var ) ) { return( count( $var ) ); }
  elseif( "$var" != "" ) { return( 1 ); }
  else { return( 0 ); }
};

IF文でのチェック(続き)

それでは、そのほかのチェック方法や関数はどんな値を返すのでしょうか?
ちょっとプログラムで確認しました。

X-Powered-By: PHP/4.2.2 Content-type: text/html

$vale=... ( $value )? empty
($value)
isset
($value)
$value
== ''
"$value"
==
""
$value
===
FALSE
$value
===
NULL
$value
===
""
NULL FALSE TRUE FALSE TRUE TRUE FALSE TRUE FALSE
FALSE FALSE TRUE TRUE TRUE TRUE TRUE FALSE FALSE
0 FALSE TRUE TRUE TRUE FALSE FALSE FALSE FALSE
unset FALSE TRUE FALSE TRUE TRUE FALSE TRUE FALSE
"" FALSE TRUE TRUE TRUE TRUE FALSE FALSE TRUE
'' FALSE TRUE TRUE TRUE TRUE FALSE FALSE TRUE

 

結論としては、PHP.NETでコメントされているように、自分で関数を作るしかないようです。

 

 

IF文でのチェック(ソース)
上のテーブルを作成するPHPソースです。間違ってたらごめんなさいです。
$disp = ( $a ) ? "TRUE":"FALSE";

echo "<table><tr>\n<td></td>\n";

$max_eval = 8;

for( $i = 0; $i <$max_eval; $i++ ) {
	$value = set_eval( $i, $value, $disp );
	$eval_disp[$i] = $disp;
	echo "  <td>", $disp, "</td>\n";
}
echo "</tr>\n";
$ddata = array();
for( $i_value = 0; $i_value <6; $i_value++)
{
	$value = set_value( $i_value, $disp );
	echo sprintf( "<tr>\n  <td>%s</td>\n", $disp );
	for(  $i_eval = 0; $i_eval <$max_eval; $i_eval++)
	{
		$result = set_eval( $i_eval, $value, $disp );
		$ddata[ $i_value ][ $i_eval ] = $result;
		echo "  <td>", $result, "</td>\n";
	}
	echo "</tr>\n";
}
echo "</table>";
function set_eval( $i, $value, &$disp )
{
	switch( $i )
	{
		case "0":
			$result = ( $value )? "TRUE":"FALSE";
			$disp = "( \$value )?";
			break;
		case "1":
			$result = ( empty( $value ) )? "TRUE":"FALSE";
			$disp = "empty(\$value)";
			break;
		case "2":
			$result = ( isset( $value ) )? "TRUE":"FALSE";
			$disp = "isset(\$value)";
			break;
		case "3":
			$result = ( $value == '' ) ? "TRUE":"FALSE";
			$disp = "\$value==''";
			break;
		case "4":
			$result = ( "$value" == "" ) ? "TRUE":"FALSE";
			$disp = "\"\$value\"==\"\"";
			break;
		case "5":
			$result = ( $value === FALSE ) ? "TRUE":"FALSE";
			$disp = "\$value===FALSE";
			break;
		case "6":
			$result = ( $value === NULL ) ? "TRUE":"FALSE";
			$disp =  "\$value===NULL";
			break;
		case "7":
$result = ( $value === "" ) ? "TRUE":"FALSE";
$disp = "\$value===\"\"";
break;
default: $result = "?"; $disp = "???"; break; } return $result; } function set_value( $i, &$disp ) { switch( $i ) { case "0": $value = NULL; $disp = "NULL"; break; case "1": $value = FALSE; $disp = "FALSE"; break; case "2": $value = 0; $disp = "0"; break; case "3": unset( $value ); $disp = "unset"; break; case "4": $value = ""; $disp = "\"\""; break; case "5": $value = ''; $disp = "''"; break; default: $value = "?"; $disp = "???"; break; } return $value; }