web-dev-qa-db-ja.com

PHP-警告-未定義のプロパティ:stdClass-修正しますか?

エラーログにこの警告が表示され、コードでこの問題を修正する方法を知りたいと思いました。

警告:PHP注意:未定義のプロパティ:440行目のscript.phpのstdClass :: $ records

いくつかのコード:

// Parse object to get account id's
// The response doesn't have the records attribute sometimes.
$role_arr = getRole($response->records);  // Line 440 

レコードが存在する場合の応答

stdClass Object
(
    [done] => 1
    [queryLocator] =>
    [records] => Array
        (
            [0] => stdClass Object
                (
                    [type] => User
                    [Id] =>
                    [any] => stdClass Object
                        (
                            [type] => My Role
                            [Id] =>
                            [any] => <sf:Name>My Name</sf:Name>
                        )

                )

        )

    [size] => 1
)

レコードが存在しない場合の応答

stdClass Object
(
    [done] => 1
    [queryLocator] =>
    [size] => 0
)

Array_key_exists()機能のようなものを考えていましたが、オブジェクトについては何でもいいですか?または私はこれについて間違った方法で行っていますか?

50
Phill Pafford
if(isset($response->records))
    print "we've got records!";
111
user187291

この場合、次を使用します。

if (!empty($response->records)) {
 // do something
}

プロパティが存在しない場合、い通知を受け取ることはありません。実際に使用するレコードがいくつかあることがわかります。 $ response-> recordsは、空の配列、NULL、FALSE、または他の空の値ではありません。

5
dazweeja
5
hacksy

isset()はトップレベルでは問題ありませんが、ネストされた値が設定されているかどうかを調べるにはempty()の方がはるかに便利です。例えば:

if(isset($json['foo'] && isset($json['foo']['bar'])) {
    $value = $json['foo']['bar']
}

または:

if (!empty($json['foo']['bar']) {
    $value = $json['foo']['bar']
}
4
markdwhite

property_existsを使用する場合は、get_class()でクラスの名前を取得する必要があります

この場合、次のようになります。

 if( property_exists( get_class($response), 'records' ) ){
       $role_arr = getRole($response->records);
 }
 else
 {
       ...
 }
3
Astucieux

応答自体には、レコードのサイズがあるようです。これを使用して、レコードが存在するかどうかを確認できます。何かのようなもの:

if($response->size > 0){
    $role_arr = getRole($response->records);
}
2
pinaki

これがうまくいくと思うなら:

if(sizeof($response->records)>0)
$role_arr = getRole($response->records);

新しく定義されたプロパティも含まれています。

1
Melsi

メンバーを探しているかメソッドを探しているかに応じて、次の2つの関数のいずれかを使用して、特定のオブジェクトにメンバー/メソッドが存在するかどうかを確認できます。

http://php.net/manual/en/function.method-exists.php

http://php.net/manual/en/function.property-exists.php

より一般的には、それらすべてが必要な場合:

http://php.net/manual/en/function.get-object-vars.php

1
AvatarKava