2015年05月07日

三項演算子を使った、コンボボックスのデータの再表示

三項演算子 : PHP オンラインマニュアル

マニュアルでは少し解りにくいところ(比較演算子)にありますが、構文自体は昔からあるオーソドックスなものです。

PHP でコンボボックスを扱う場合、送信後の画面で送信前に選択した内容を同じ状態で選択するには、PHP 側で意図的に selected を OPTION 要素の中に書き込む必要があります。その場合、以下のように記述しておくと余計なコードを他の場所に書かなくて済むのでとても使いやすいはずです。
<select id="action_file"
	name="php_file">
	<option value="log3.php"
		<?= $_GET["php_file"] == "log3.php" ? "selected" : "" ?> >連結演算子で文字列の連結
	</option>
	<option value="log4.php"
		<?= $_GET["php_file"] == "log4.php" ? "selected" : "" ?> >文字列内に変数を埋め込んで連結
	</option>
</select>



タグ:PHPの基本
posted by at 2015-05-07 11:16 | 文法 | このブログの読者になる | 更新情報をチェックする

2013年05月04日

4種類のスカラー型

PHP: 導入 - Manual

PHP のマニュアルの「導入」部分で、PHP で使用されるデータ型について書かれています。その中で実際の中心となるのは、「スカラー型」と呼ばれる「量」をあらわす数値型ですが、文字列もその中に含まれます。

スカラー [scalar]

大きさだけで表せる量。
時間温度密度等。
4 種類のスカラー型  ■ 論理値 (boolean)  ■ 整数 (integer)  ■ float (浮動小数点数, double も同じ)  ■ 文字列 (string) スクリプト言語では、データ型を明示して変数を作成するという事をしません。与えられた実際の値によって自動的に変数内部が変換されていきます。また、意図的にその型へと変換したい場合は、C言語と同じキャストか関数で行います。 ※ マニュアルにある float 型の補足説明
マニュアル内のいくつかの場所で "double" 型という記述が残っているかもしれません。 

double は float と同じものだと考えてください。2 種類の名前が存在するのは、 歴史的な理由によるものです。 
通常は PHP にまかせる 例えば、boolean 型に関して以下のような説明があります。
boolean に明示的に変換を行うには、キャスト (bool) または (boolean) を使用します。

しかし、演算子、関数、制御構造が boolean 型の引数を必要とする場合には、値は自動的に変換されるため、 多くの場合はキャストは不要です。 
これは、以下のような値が FALSE として PHP の実行が行われる事で納得する事ができます。  ■ integer の 0 (ゼロ)  ■ float の 0.0 (ゼロ)  ■ 空の文字列、 および文字列の "0" ※ PHP: gettype - Manual
<?
header( "Content-Type: text/html; Charset=shift_jis" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

$a = (int)0;

if ( $a == FALSE ) {
	print "整数<br>";
	print gettype($a) . "<hr>";
}

$a = (float)0;

if ( $a == FALSE ) {
	print "浮動小数点数<br>";
	print gettype($a) . "<hr>";
}

$a = "0";

if ( $a == FALSE ) {
	print "文字列<br>";
	print gettype($a) . "<hr>";
}

$a = "";

if ( $a == FALSE ) {
	print "空文字列<br>";
	print gettype($a) . "<hr>";
}

$a = NULL;

if ( $a == FALSE ) {
	print "NULL<br>";
	print gettype($a) . "<hr>";
}

?>

整数
integer
浮動小数点数
double
文字列
string
空文字列
string
NULL
NULL
但し、=== 演算子を使用するとその限りではありません
<?
header( "Content-Type: text/html; Charset=shift_jis" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

$a = false;

if ( $a === FALSE ) {
	print "真偽値<br>";
	print gettype($a) . "<hr>";
}

$a = (int)0;

if ( $a === FALSE ) {
	print "整数<br>";
	print gettype($a) . "<hr>";
}

$a = (float)0;

if ( $a === FALSE ) {
	print "浮動小数点数<br>";
	print gettype($a) . "<hr>";
}

$a = "0";

if ( $a === FALSE ) {
	print "文字列<br>";
	print gettype($a) . "<hr>";
}

$a = "";

if ( $a === FALSE ) {
	print "空文字列<br>";
	print gettype($a) . "<hr>";
}

$a = NULL;

if ( $a === FALSE ) {
	print "NULL<br>";
	print gettype($a) . "<hr>";
}

?>


if ( (bool)$a === FALSE ) { と書くと一致します


更新履歴
2010-10-17 : 記事作成
2013-05-04 : フォントサイズ・改行調整



posted by at 2013-05-04 13:37 | 文法 | このブログの読者になる | 更新情報をチェックする

2010年10月28日

PHP変数名を文字列で参照 : 可変変数を使用した特殊文字列による変数と JSON との関係

PHP のマニュアルでは明示していませんが、PHP の変数は全て $ を除いた変数名を文字列として扱えるようにできています。

つまり、$value = "値"; が実行されると、自動的に ${"value"} で内容が参照可能になり、逆も同じ結果を生みます。

オンライン実行

この事について書かれた部分を PHP の CHM を HTML にデコンパイルして、内容を検索してみましたが具体的な記述は無く、気がついた人だけが認識するような結果になっています。

唯一、json_decode() の説明に以下のようなサンプルがあるのみです。

print $obj->{'foo-bar'}; // 12345

これは、JSON の表現で以下のような事が可能である事から、似た表現になっていますが、実装されている方法はかなり違うものです。
a = { "2010/10/28" : "当日" }

alert(a["2010/10/28"]);

当然ですが、a.2010/10/28 という表現はできませんが、文字列による表現に置き換えると正しく実行されます。つまり、json_decode() では常にこのようなことを意識する必要があるということです。が、仕様として特殊文字をプロパティに使うかどうかということも考察する必要がありそうです。


関連する記事

PHP : 日本語を使った変数( 特殊文字列で変数 )



posted by at 2010-10-28 14:55 | 文法 | このブログの読者になる | 更新情報をチェックする