忍者ブログ

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

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

【PHP】「stdClass」を関数の引数としての使い方について

以前 stdClass の使い方を以下の記事に記しましたが、今回はそれを関数の引数に使おうと思います。

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

stdClass を引数にする場合には、どの様なプロパティを設定するのかは、前もって関数の呼び出し側と、関数内の処理を決めておく必要があります。
但し、引数が非常に多くなる場合には stdClass で渡すことですっきりした関数呼び出しにはなると思います。

以下のソースは stdClass を生成し3個のプロパティへを設定し、その内容を表示する簡単な例です。

<?php
//[stdClass]が引数の関数宣言
function funcStd(stdClass $cls) {
    echo "stdVal1=[$cls->stdVal1]<br />";
    echo "stdVal2=[$cls->stdVal2]<br />";
    echo "stdVal3=[$cls->stdVal3]<br />";
}
//[stdClass]の生成
$stdObj = new stdClass;
$stdObj->stdVal1 = 1111;
$stdObj->stdVal2 = "2222";
$stdObj->stdVal3 = "3333";
//関数の実行(データ表示)
funcStd($stdObj);
?>


3個のプロパティ値が表示されることが確認できます。

stdVal1=[1111]
stdVal2=[2222]
stdVal3=[3333]


さらにもう一つの関数を宣言します。 この関数は、同じ引数を持つのですが各プロパティを再設定する様にしています。

<?php
//[stdClass]が引数の関数宣言
function funcStd(stdClass $cls) {
    echo "stdVal1=[$cls->stdVal1]<br />";
    echo "stdVal2=[$cls->stdVal2]<br />";
    echo "stdVal3=[$cls->stdVal3]<br />";
}
//[stdClass]の内容を変更する関数宣言
function funcStdUpd(stdClass $cls) {
    $cls->stdVal1 *= 10;
    $cls->stdVal2 = $cls->stdVal2 . "AAA";
    $cls->stdVal3 = $cls->stdVal3 . "BBB";
}
//[stdClass]の生成
$stdObj = new stdClass;
$stdObj->stdVal1 = 1111;
$stdObj->stdVal2 = "2222";
$stdObj->stdVal3 = "3333";
//関数の実行(データ表示)
funcStd($stdObj);
//[stdClass]の内容を変更
funcStdUpd($stdObj);
//関数の実行(データ表示)
funcStd($stdObj);
?>


これを実行すると以下の様な結果になります。

stdVal1=[1111]
stdVal2=[2222]
stdVal3=[3333]
stdVal1=[11110]
stdVal2=[2222AAA]
stdVal3=[3333BBB]


関数の引数としてクラスを渡すと、参照渡しで行われる様です。 参照渡しのため、クラスプロパティの値を書き換えることが出来ますので、注意が必要です。

また、 stdClass にプロパティが存在するかどうかをチェックし、処理を分けることも可能です。 上のソースに4番目のプロパティの存在有無で処理を分ける様にする処理を付加したものを以下に示します。

<?php
//[stdClass]が引数の関数宣言
function funcStd(stdClass $cls) {
    echo "stdVal1=[$cls->stdVal1]<br />";
    echo "stdVal2=[$cls->stdVal2]<br />";
    echo "stdVal3=[$cls->stdVal3]<br />";
    if(isset($cls->stdVal4)) {
        echo "stdVal4=[$cls->stdVal4]<br />";
    }
}
//[stdClass]の内容を変更する関数宣言
function funcStdUpd(stdClass $cls) {
    $cls->stdVal1 *= 10;
    $cls->stdVal2 = $cls->stdVal2 . "AAA";
    $cls->stdVal3 = $cls->stdVal3 . "BBB";
    if(isset($cls->stdVal4)) {
        $cls->stdVal4 = $cls->stdVal4 . "CCC";
    }
}
//[stdClass]の生成
$stdObj = new stdClass;
$stdObj->stdVal1 = 1111;
$stdObj->stdVal2 = "2222";
$stdObj->stdVal3 = "3333";
//関数の実行(データ表示)
funcStd($stdObj);
//[stdClass]の内容を変更
$stdObj->stdVal4 = "4444";
funcStdUpd($stdObj);
//関数の実行(データ表示)
funcStd($stdObj);
?>



これを実行すると以下の様な結果になります。

stdVal1=[1111]
stdVal2=[2222]
stdVal3=[3333]
stdVal1=[11110]
stdVal2=[2222AAA]
stdVal3=[3333BBB]
stdVal4=[4444CCC]











PR

コメント

コメントを書く