सवाल PHP - चेतावनी - अपरिभाषित संपत्ति: stdClass - ठीक है?


मुझे यह त्रुटि मेरे त्रुटि लॉग में मिलती है और जानना चाहता था कि मेरे कोड में इस समस्या को कैसे ठीक किया जाए।

चेतावनी: PHP नोटिस: अपरिभाषित संपत्ति: stdClass :: लाइन 440 पर script.php में $ रिकॉर्ड

कुछ कोड:

// 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 () कार्यक्षमता जैसे कुछ सोच रहा था लेकिन वस्तुओं के लिए, कुछ भी? या मैं इस बारे में गलत तरीके से जा रहा हूं?


44
2018-03-18 16:32


मूल




जवाब:


if(isset($response->records))
    print "we've got records!";

100
2018-03-18 16:42



किसी भी तरह इस्तेमाल किया जा सकता है? उदाहरण: $ foo = $ bar-> foo या "default"; - Hontoni
आप इसे एल्विस $ role_arr = getRole ($ प्रतिक्रिया-> रिकॉर्ड) के साथ कर सकते हैं?: []; - Pierre
जीवन बचतकर्ता धन्यवाद। - Si8
मैं इस समाधान का उपयोग foreach में कैसे कर सकता हूं? उदाहरण: foreach($product->images as $images) ? - Shadow_X


आप property_exists का उपयोग कर सकते हैं
http://www.php.net/manual/en/function.property-exists.php


5
2018-03-18 16:38





इस मामले में, मैं उपयोग करूंगा:

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

यदि संपत्ति मौजूद नहीं है, तो आपको कोई बदसूरत नोटिस नहीं मिलेगा, और आपको पता चलेगा कि आपको वास्तव में काम करने के लिए कुछ रिकॉर्ड मिल गए हैं, यानी। $ प्रतिक्रिया-> रिकॉर्ड एक खाली सरणी, पूर्ण, गलत, या कोई अन्य खाली मूल्य नहीं है।


5
2017-07-03 01:26





isset () शीर्ष स्तर के लिए ठीक है, लेकिन खाली () यह पता लगाने के लिए और अधिक उपयोगी है कि नेस्टेड मान सेट हैं या नहीं। उदाहरण के लिए:

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

या:

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

5
2018-04-17 15:48





यदि आप उपयोग करना चाहते हैं property_exists, आपको कक्षा का नाम प्राप्त करना होगा get_class()

इस मामले में यह होगा:

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

4
2017-09-19 09:13





प्रतिक्रिया में खुद के रिकॉर्ड का आकार लगता है। आप यह जांचने के लिए उपयोग कर सकते हैं कि रिकॉर्ड मौजूद हैं या नहीं। कुछ इस तरह:

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

2
2018-03-18 16:44





इस पर निर्भर करते हुए कि आप किसी सदस्य या विधि की तलाश में हैं, आप इन दोनों कार्यों में से किसी एक का उपयोग कर सकते हैं यह देखने के लिए कि किसी सदस्य / विधि किसी विशेष ऑब्जेक्ट में मौजूद है या नहीं:

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
2018-03-18 16:37





अगर ऐसा लगता है कि यह काम करेगा:

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

नए परिभाषित प्रोपर्टीज भी शामिल हैं।


1
2017-12-24 20:58