忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

【PHP】連想配列の様な「stdClass」の使い方について

最近他の人が作ったプログラムの改修作業が在ったのですが、その中で stdClass を使っていて 私は使ったことが無かったので少し調べてみたところ、連想配列の様な使い方ができることを知りました。

クラスを使う場合、普通は別のクラス宣言でクラス名を付けますが stdClass は無名クラスとして クラスオブジェクトを生成する様です。

以下のソースは stdClass を生成し2個のプロパティへの代入を行う簡単な例です。
stdClass で生成されたオブジェクトに対して、プロパティを指定する時点で、 内部的にそのプロパティが生成されるようです。

<?php
//[stdClass]の生成
$stdObj = new stdClass;
$stdObj->stdVal1 = 1111;
$stdObj->stdVal2 = "2222";
//[stdClass]の参照
echo "stdVal1=[$stdObj->stdVal1]
"; echo "stdVal2=[$stdObj->stdVal2]
"; ?>


結果は以下の表示になります。

stdVal1=[1111]
stdVal2=[2222]


2個のプロパティに値が設定されていることが確認できます。
尚、このソースに stdVal3 というプロパティを参照する様にしてみます。

<?php
//[stdClass]の生成
$stdObj = new stdClass;
$stdObj->stdVal1 = 1111;
$stdObj->stdVal2 = "2222";
//[stdClass]の参照
echo "stdVal1=[$stdObj->stdVal1]
"; echo "stdVal2=[$stdObj->stdVal2]
"; echo "stdVal3=[$stdObj->stdVal3]
"; ?>


この結果は以下の様に、Notice エラーが発生します。
代入設定されていないプロパティを参照することはできない様です。

stdVal1=[1111]
stdVal2=[2222]

Notice: Undefined property: stdClass::$stdVal3 in C:\xampp\htdocs\__test\test-stdclass.php on line 9
stdVal3=[]



この stdClass ですが配列に変換することができます。 以下のソースでは stdClass オブジェクトを array オブジェクトに代入し変換しています。

<?php
//[stdClass]の生成
$stdObj = new stdClass;
$stdObj->stdVal1 = 1111;
$stdObj->stdVal2 = "2222";
//[stdClass]から[array]への変換
$arrObj = (array)$stdObj;
echo "stdVal1=[".$arrObj["stdVal1"]."]
"; echo "stdVal2=[".$arrObj["stdVal2"]."]
"; ?>


上のソースから stdClass は連想配列的であることが分かります。
尚、 stdVal1 とソース上固定の記述のみしか扱えないわけでは無く、 次の例では stdVal1 の参照を変数を用いて行う方法を示します。

<?php
//[stdClass]の生成
$stdObj = new stdClass;
$stdObj->stdVal1 = 1111;
$stdObj->stdVal2 = "2222";
//[stdClass]の参照を変数で行う
$key1 = "stdVal1";
$key2 = "stdVal2";
echo "stdVal1=[".$stdObj->$key1."]
"; echo "stdVal2=[".$stdObj->$key2."]
"; //中括弧で囲っても同じ echo "stdVal1=[".$stdObj->{$key1}."]
"; echo "stdVal2=[".$stdObj->{$key2}."]
"; ?>


オブジェクトのプロパティを変数で扱えると応用がいろいろ利くと思います。
PHP でシステムを組んでいると、データの中の区分値などを select タグを用いて入力します。 この区分値を入力不可にしようとして select タグの部分に disabled="disabled" とすることが多いです。

ただこの方法ですと、画面上は select ボックスは表示されるのですが POST 処理で値が渡ってきません。 以下のソースをブラウザで表示して OK を押下すると「select value = 」の所には何も表示されません。












PR

コメント

コメントを書く