エラーログにこの警告が表示され、コードでこの問題を修正する方法を知りたいと思いました。
警告: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()機能のようなものを考えていましたが、オブジェクトについては何でもいいですか?または私はこれについて間違った方法で行っていますか?
if(isset($response->records))
print "we've got records!";
この場合、次を使用します。
if (!empty($response->records)) {
// do something
}
プロパティが存在しない場合、い通知を受け取ることはありません。実際に使用するレコードがいくつかあることがわかります。 $ response-> recordsは、空の配列、NULL、FALSE、または他の空の値ではありません。
Property_existsを使用できます
http://www.php.net/manual/en/function.property-exists.php
isset()はトップレベルでは問題ありませんが、ネストされた値が設定されているかどうかを調べるにはempty()の方がはるかに便利です。例えば:
if(isset($json['foo'] && isset($json['foo']['bar'])) {
$value = $json['foo']['bar']
}
または:
if (!empty($json['foo']['bar']) {
$value = $json['foo']['bar']
}
property_exists
を使用する場合は、get_class()
でクラスの名前を取得する必要があります
この場合、次のようになります。
if( property_exists( get_class($response), 'records' ) ){
$role_arr = getRole($response->records);
}
else
{
...
}
応答自体には、レコードのサイズがあるようです。これを使用して、レコードが存在するかどうかを確認できます。何かのようなもの:
if($response->size > 0){
$role_arr = getRole($response->records);
}
これがうまくいくと思うなら:
if(sizeof($response->records)>0)
$role_arr = getRole($response->records);
新しく定義されたプロパティも含まれています。
メンバーを探しているかメソッドを探しているかに応じて、次の2つの関数のいずれかを使用して、特定のオブジェクトにメンバー/メソッドが存在するかどうかを確認できます。
http://php.net/manual/en/function.method-exists.php
http://php.net/manual/en/function.property-exists.php
より一般的には、それらすべてが必要な場合: