プロが教えるわが家の防犯対策術!

PHPでの質問です。

$objectにはあるオブジェクトが入っており、

print_r($object)を実行すると以下の
2つのパターンが返ってくるとします。

パターン1(中身あり)
stdClass Object ( [item] => abc )

パターン2(中身なし)
stdClass Object ( )

以下のif文において
中身があるかどうかを判定するには
どうしたらいいでしょうか?

if(×××){
echo "中身あり";
}else{
echo "中身なし";
}

※ただし中身ありの場合、 [item] => abc は、 [fruit] => apple などのように
どんな要素が入っているかは分かりません。


//間違い例
//下記のコードだとどちらも「中身あり」が出力されます。

if(isset($object)){
echo "中身あり";
}else{
echo "中身なし";
}


またオブジェクトや要素などの言葉の使い方が間違っていたら
そちらも指摘して頂いたら幸いです。
以上よろしくお願いいたします。

A 回答 (2件)

お礼拝見しました。



> $objectはstdClassです。

質問にも記述いただいていましたね。。。失礼しました。

それであればオブジェクト内のプロパティが分かれば良いので、
if(count(get_object_vars($object1)) === 0) {
のようにすれば判定可能かと思います。

プロパティ名が分かればproperty_exists() 関数も使用できますが、ちょっとケースが違うようなので。

http://php.net/manual/ja/function.get-object-var …
http://php.net/manual/ja/function.property-exist …
    • good
    • 0
この回答へのお礼

解決しました

get_object_varsで配列として取得し、その配列数で判定するのですね。

ちなみに上記の回答を得るまでは、
考え方は一緒ですが、

foreach($object as $key => $val){
$object_array[] = $key;
}

で強引に配列にしてから
count($object_array)でやろうとしてました。

車輪の再発明をしなくてすみました。

どうもありがとうございました!

お礼日時:2016/03/17 23:39

$objectの「中身なし」をどのように定義しているのでしょうか?


もし$object = ""; と宣言している場合は「空文字の値がセットされている」ということになるため、
isset($object) はture となります。

isset()と似た関数でempty()やis_null()などもありますので、
このあたりの違いについて確認いただくといいように思いました。
http://php.net/manual/ja/types.comparisons.php
    • good
    • 0
この回答へのお礼

回答誠にありがとうございます!

すみまん、$objectはstdClassです。

empty()もis_null()も試したみたのですが、
オブジェクト自体は存在するので分別できないようです。
一つの関数のみで判定するのは難しいようですね…。

下記の様なコードを作成してみました。
どちらも中身ありが出力されます。

<?php
//パターン1
$object1 = new stdClass;
$object1->item = "abc";

print_r($object1);//stdClass Object ( [item] => abc )

if(isset($object1)){
echo "中身あり";
}else{
echo "中身なし";
}

echo "<br />";

//パターン2
$object2 = new stdClass;

print_r($object2);//stdClass Object ( )

if(isset($object2)){
echo "中身あり";
}else{
echo "中身なし";
}

お礼日時:2016/03/17 19:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!